文件上传漏洞绕过
文件上传漏洞绕过
工具:
burpsuite--代理工具
weevely----linux的中国菜刀
此处不详细讲述burpsuite如何做代理,weevely首先生成一句话木马(weevely会对一句话进行编码处理,也有免杀的效果)
weevely generate admin admin.php //admin为一句话密码,admin.php为一句话文件
1.Javascript突破
绕过概念:文件上传也许会使用后缀名验证文件,这种验证可分为客户端验证和服务端验证。
绕过方法:可在浏览器中禁用javascript,删除可控制的js文件,也可以进行抓包对文件后缀进行修改。
首先尽行上传查看是否允许
对一句话文件进行修改后缀名
点击上传的时候对其进行抓包对filename进行修改为admin.php这时候即可绕过客户端绕过
连接成功
2.MIME类型检测
绕过概念:MIME类型检测实际上就是客户端在上传文件到服务端的时候,服务端对客户端上传的文件的content-type类型进行进行检测,如果是白名单所允许的,则可以正常上传,否则上传失败。
绕过方法:通过抓包对上传文件的content-type字段进行修改如image/gif,从而绕过服务端验证
首先上传查看是否允许
点击上传进行抓包
显示上传成功并可以查看文件路径
3.文件内容检测
绕过概念:一般文件内容检测使用getimagesize()函数检测,通过文件头部内容来判断合法性,会判断文件是否是一个有效的图片文件,如果是,则允许上传,否则的话,不允许上传。
绕过方法:通过人为添加合法文件进行绕过
JPG:FF D8 FF E0 00 10 4A 46 49 46
GIF:47 49 46 38 39 61(GIF89a)
PNG:89 50 4E 47
上传抓包,为文件内容增加头部
4.0x00截断检测
绕过概念:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当作结束符,遇见这个字符后,就不会解析后面的字符。
绕过方法:假设上传文件为admin.php#.png,当上传文件时进行抓包将#替换为0x00,检测程序在进行检测时发现该文件后缀为.png,检测无误。但是当程序执行写入操作的时候遇见0x00就不会理会后面的.png最终保存至服务器的文件为admin.php。
条件:PHP<5.3.29,且GPC关闭。
首先将文件名改为admin.php#.png
上传抓包,对此处#对应的23该为00,则#消失不见。
5.分布式配置文件(文件重写)绕过
绕过概念:.htaccess文件(或者“分布式配置文件”)提供了针对目录改变配置的方法,即,在一个特定的文档中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。用户可以利用此文件定义解析文件的后缀,从而进行恶意利用。
绕过方法:建立文件名为.htaccess文件,将其上传,当这个文件上传后会修改服务端解析文件的配置文件,会将jpg文件以php文件进行解析。
首先制作.htaccess文件
<FilesMatch "jpg"> SetHandler application/x-httpd-php </FilesMatch>
如果文件前面不能加点号可对其抓包后加点
此处修改文件后缀为jpg
上传成功后服务端会把jpg文件解析成php。这时候直接将admin.jpg当成admin.php文件进行连接。
连接成功
6.黑名单-文件名绕过
绕过概念:文件名黑名单就是对用户上传文件的后缀进行限制,当操作系统为linux时,系统对大小写敏感。
绕过方法:
PHP:php5、php6、php后加空格、pHp(大小写混合)
ASP:aspx、cer、cdx、asa、aSp(大小写混合)
JSP:jspx、jspf、jSp(大小写混合)
如果遇见直接消除文件后缀的可在后缀中间再写一个后缀名,例:pphphp...
将文件名进行大小写混合
7.白名单-扩展名绕过
IIS解析漏洞:
目录解析
原理:服务器默认会把.asp,*.asp目录下的文件都当成asp文件解析。
形式:www.xxx.com/xx.asp/xx.jpg
文件解析
原理:服务器默认不解析;后面的内容,因此xx.asp;.jpg便被解析成asp文件。
形式:www.xxx.com/xx.asp;.jpg
apache解析漏洞:
原理:Apache解析文件的规则是从右向左开始解析,如果后缀名为不可识别文件,就会往左判断,如果Apache的conf里有这一行配置AddHandler php5-script.php这时只要文件名中包含.php即使文件名是admin.php.jpg也会以php来执行。
比如:admin.php.qwe.asd=>php后面的两种后缀是apache不可识别解析,apache就解析成admin.php。
形式:www.xxx.xxx.com/admin.php.php222
nginx解析漏洞:
原理:Nginx中php配置错误导致的解析漏洞,当Nginx拿到文件路径/admin.jpg/admin.php后,会认为该文件是php文件,转交给php处理,php处理时发现/admin.jpg/admin.php不存在,便删去最后的/test.php,又看/test.jpg存在,如果这时候php配置文件的cgi.fix_pathinfo值为真,则php就会执行/test.jpg文件。
形式:www.xx.com/admin.jpg/admin.php