检查后缀型上传漏洞>客户端js检查
漏洞原理
有些系统只是在客户端使用js对上传文件的后缀进行检查,服务端没有进行检查。由于客户端的js用户可以禁用,修改等等,导
致可以绕过客户端的检测,上传不合法文件。
漏洞利用
1.将js禁用
2.修改客户端的js
3.上传合法后缀,使用burp抓包,再改后缀。
检查后缀型上传漏洞>服务端MIME检查
漏洞原理
有些系统只是在客户端使用js对上传文件的后缀进行检查,服务端没有进行检查。由于客户端的js用户可以禁用,修改等等,导致可以绕过客户端的检测,上传不合法文件。
漏洞利用
上传webshell,burp抓包,修改Content-Type为image/jpge,image/png,image/png
检查后缀型上传漏洞>黑名单存在遗漏
漏洞原理
大部分Web系统是由asp,php和jsp三种主流语言编写的。它们默认的后缀asp,aspx,.php,.jsp。然而web服务器还支持其它后缀。这时如果Web系统只是禁止上传默认可解析的后缀,那么则可以通过其他可解析的后缀绕过
漏洞利用
例如: php环境下可以尝试上传,php2,php3, php4,php5
检查后缀型上传漏洞>上传.htaccess
漏洞原理
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等
功能。
漏洞利用
1.上传内容为AddType application/x-httpd-php .jpg的.htaccess到服务器2.上传后缀为.jpg的图片马
3.访问图片马即可运行马中的恶意代码
检查后缀型上传漏洞>上传.user.ini
.user.ini内容:
GIF89a
auto_prepend_file=a.jpg
访问同目录下的任意php文件a.jpg均会被包含
检查后缀型上传漏洞>后缀大小写混合绕过
漏洞原理
有些系统的黑名单很全面,但是没有对大小写进行转换,则可能会导致大小写绕过。
注意: Windows操作系统下文件名不区分大小写,Linux下区分。所以这个姿势只适合Window操作系统.
漏洞利用
例如: php环境下如果系统禁止上传.php..php2.php3..php4..php5,那这可以尝试上传以下后缀:(1).PHp
(2).phP2
(3).pHP3
(4)……
检查后缀型上传漏洞>空格绕过
漏洞原理
当黑名单中限制上传.php后缀的文件时,我们可以上传test.php+空格。这时服务器获取到的后缀是.php+空格,不在黑名单中,上传成功。由于Windows文件系统的特性,在生成的test.php+空格=test.php。
漏洞利用
例如︰
php环境下上传test.php+空格,test.php2+空格,test.php3+空格等等Asp环境下上传test.asp+空格,test.asa+空格,test.cer+空格等等Jsp环境下上传test.jsp+空格,test.jspx+空格等等
检查后缀型上传漏洞>点绕过
漏洞原理
当黑名单中限制上传.php后缀的文件时,我们可以上传test.php。这时服务器获取到的后缀是空,不在黑名单中,上传成功。由于Windows文件系统的特性,在生成的test.php+.=test.php。
漏洞利用
例如∶
php环境下上传test.php.,test.php2.,test.php3.等等Asp环境下上传test.asp.,test.asa.,test.cer.等等Jsp环境下上传test.jsp.,test.jspx.等等
检查后缀型上传漏洞>:.$DATA绕过
漏洞原理
ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果系统对请求正文的filename匹配不当的话导致绕过。
漏洞利用
例如︰在php环境下可以上传test.php::$DATA。
注意:::$DATA不区分大小写
检查后缀型上传漏洞>双后缀名绕过
漏洞原理
上传文件名为shel.asdphpasd.pHP.php,上传后发现变为了shellasdasd..我们可以猜出规律为系统替换掉了字符串php,且不区分大小写。根据这个规律,我们上传一个文件名为shel.pphphp,那么经过系统的过滤机制就变成了shell.php.
漏洞利用
例如:在php环境下可以上传test.pphphp。
检查后缀型上传漏洞>配合解析漏洞
漏洞原理
漏洞利用
例如︰在php+apache环境下可以上传test.php.xxx。由于xxx为apache无法识别的后缀,讲以php对文件进行解析。
检查后缀型上传漏洞>配合解析漏洞
漏洞利用
例如:在linux+php+apache环境下可以上传test.php[OxOa]文件,绕过黑名单,然后访问http://x/test.php%Oa,即可
让服务器执行上传的文件。
注意:
1.获取文件名时不能用$_FILES|'file']['name'],因为他会自动把换行去掉
2.只能在Linux
猜想:Windows下不支持换行符结尾的文件命名方式,实际上是绕过了黑名单,只是无法创建文件。
检查后缀型上传漏洞>%00截断
漏洞原理
C语言中字符串\O为结束的标志,而php使用的是c语言编写的。所以保存路径
SavePath=UploadFile/shell.php\0a.jpg
相对于
savePath= UploadFile/shell.php
漏洞利用
例如:在php2.7.15环境下上传一个shell,burp抓包,在保存路径或文件名后使用%0O进行截断。
检查后缀型上传漏洞>截断截断小技巧
小技巧:如何快速在截断处插入Ox00字符?
答:快速Ox00截断,输入%00,选中右键,编码转换。
问题:%00与0x00有什么区别?
答:在url中的编码是url编码,%OO代表二进制00上传表达中使用的编码是multipart/form-data,OxOO代表二进制O0它们本质是一个东西,只是在不同位置不同编码的表现形式不一样而已。
检查内容型上传漏洞>检查文件头
漏洞原理
部分系统在判断图片内容时,通过读取文件头两个字节,然后进行匹配来识别图片。
语言文件头(16进制)
漏洞利用
上传正常webshell,使用burp suite抓包,将文件头在16进制模式下改为图片文件的文件头。
检查内容型上传漏洞>突破php自带库函数
突破getimagesize()
突破exif_imagetype()
检查内容型上传漏洞次渲染
漏洞原理
检查内容型上传漏洞>二次渲染漏洞利用
1. Gif格式突破二次渲染《Encoding Web Shells in PNG IDAT chunks》
2. Png格式二次渲染《gif payload.php》
3. Jpg格式突破二次渲染《O6xop, 6e3onaCHoi sarpy3KM M306paxeHM吃》
逻辑型上传漏洞>条件竞争
逻辑型上传漏洞>条件竞争+解析漏洞组合拳
上传漏洞防御
漏洞防御
入侵的目的不是入侵,而是从入侵的思维中提炼的防御的方法。
1.最好设置白名单,而不是黑名单
2.重命名上传后的文件。
3.检查上传文件的内容,并重新渲染生成新的图片
4.设置上传目录禁止运行