php前端后缀名绕过,有关上传webshell文件绕过的总结

2017-08-15

下午碰到一个站,有两处上传漏洞,通过一个点获取了webshell,尝试另一个点获取shell,还使用了白盒测试,然而并没有绕过。

总结一下,碰到文件上传的好事,应该如何绕过后缀名

1. 前台脚本检测扩展名

由于是客户端脚本的检测,任何的逻辑都可以通过burpsuit抓包,直接更改报文内容,替换文件扩展名

2. Content-Type检测文件类型-绕过

Content-Type检测是对http报文中的MIME类型进行检测,服务端逻辑是检测Content-Type的内容,无论是黑名单,还是白名单,都可以通过burpsuit更改Content-Type字段,改成不被阻拦的MIME类型。主要是由于服务端对于文件的解析,并不依靠于Content-Type字段,而是通过文件的后缀类型,所有Content-Type检测并没什么用。

3. 文件系统%00截断—绕过

假设需要上传的文件为:eval.php,服务端的白名单允许.jpg的格式,则修改文件名为:eval.php%00.jpg。因为文件系统读到%00会认为文件已经结束,但是利用%00截断也需要根据服务端具体逻辑,需要判断服务端是否会对上传的文件进行重命名

服务端检测文件后缀名的逻辑是通过lastIndexOf(“.”)实现,这种情况.jpg会会被服务器放行,但是!如果服务器对文件进行重命名

那除去.jpg部分其他部分都会被重命名,%00字段也会被覆盖,这种情况即使文件内容是php代码,但文件会变成20170815123012.jpg,即便能够访问上传的文件,

你可能感兴趣的:(php前端后缀名绕过)