文件上传思路
upload-labs分类
如何判断上传漏洞类型:
结合Upload_Attack_Framework来完成对上传漏洞的总结
客户端
js检查及绕过
这类检测通常在上传页面里含有专门检测文件上传的 javascript 代码 最常见的就是检测扩展名是否合法
绕过方法:
- 禁用相关检测js
- 绕过后使用burp进行截断修改后提交
服务端
检查后缀
黑名单
上传.htaccess绕过:
当黑名单中不存在.htaccess的时候 可上传名为.htaccess的文件,内容如下:
<FilesMatch "lktop">
SetHandler application/x-httpd-php
</FilesMatch>
当apache在解析该目录下的php时,就会按照.htaccess中的要求去解析,只要匹配到了文件名里有lktop这个字符串,就会把该文件当成php文件解析
还可写成
<FilesMatch "lktop.lpp">
SetHandler application/x-httpd-php
</FilesMatch>
上传特殊可解析后缀
在apache的httpd.conf配置中,存在
AddType application/x-httpd-php .php .php3 .phtml
可将 php3 phtml后缀解析为php进行执行
后缀大小写绕过
在黑名单处理前并未对后缀进行大小写转换,故采用混合大小写即可。(phP,pHp,pHP,Php.......)
空格绕过
在黑名单处理前并未对文件名进行去空处理,在后缀尾部加空格即可。
点绕过
在黑名单处理前并未对文件名进行去”.”处理,用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过。
::$DATA绕过
在黑名单处理前并未对文件名进行去”::$DATA”处理,php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名
双写绕过
由于保存的文件名是使用的处理过的文件名,故可以双写尾部。(如 点+空格+点)
当对黑名单中的后缀名进行替换为空处理时,同样使用双写进行处理。(如 pphphp)
白名单
MIME类型绕过:
截包修改Content-type类型为image/gif image/jpeg image/png
%00截断
只存在于php5.3.4以下
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
GET可以把url自动转码,但当save_path在post包里时,POST方式不会自动将%00编码为空字符。
所以需要在burp中选中%00右击->url->urldecode go即可。
检查内容
图片马生成:
copy normal.jpg /b + shell.php /a webshell.jpg
或用二进制打开在尾部添加木马
如遇到二次渲染可以分析不变的位置,并把木马插入相应的位置,详细分析参考:https://xz.aliyun.com/t/2657
检测逻辑
文件上传后会一步步检查文件,检查大小,检查是否存在,然后对文件重新命名,可以使用burp不断发送上传数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。