内容简介:通常此类检测会在js文件中有一个检测的函数,一般对上传的文件后缀名做检测,例如仅允许上传png,jpg,gif等类型的文件,如果检测到的文件后缀名不是在这些名单内,则不向服务器端传输文件内容。这类检测也是最容易绕过的检测,可以使用firebug之类的插件把它禁掉或者通过burp之类的代理工具进行绕过提交。使用burp,上传时提供一个白名单内的后缀,通过burp拦包,并修改后缀后提交
- 客户端javascript检测(检测文件扩展名为主)
- 服务端MIME类型检测(检测Content-type内容)
- 服务端目录路劲检测(检测跟path相关的内容)
- 服务端文件扩展名检测(检测跟文件后缀相关的内容)
- 服务端文件内容检测(检测内容是否合法或含有恶意代码)
客户端javascript检测
通常此类检测会在js文件中有一个检测的函数,一般对上传的文件后缀名做检测,例如仅允许上传png,jpg,gif等类型的文件,如果检测到的文件后缀名不是在这些名单内,则不向服务器端传输文件内容。
这类检测也是最容易绕过的检测,可以使用firebug之类的插件把它禁掉或者通过burp之类的代理 工具 进行绕过提交。
使用burp,上传时提供一个白名单内的后缀,通过burp拦包,并修改后缀后提交
服务端检测绕过(MIME类型检测)
<?php if($_FILES['userfile']['type'] != "image/gif") { //检测Content-type echo "Sorry, we only allow uploading GIF images"; exit; } $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "File uploading failed.\n"; } ?>
上面为 php 后端检测MIME类型的一个例子
通过判断 $_FILES['userfile']['type'] != "image/gif"
来保证上传的类型为gif类型的文件。
绕过这一类型的检测,可以通过burp拦包,将原 Content-Type
类型该为符合要求的 image/gif
类型。
服务端检测绕过(目录路劲检测)
有一些web应用程序有多个文件夹用来存储图片文件,所以为了标识上传的图片是属于哪个文件夹的,上传文件时会带上文件存储路劲。而此时如果对文件目录路劲检测不够完全,可以通过截断攻击。(如%00,windows下%80-%90)
如上传时提供存储路劲为 image/20160704/
可以通过修改为 image/20160704/evil.php%00
来达到截断目的。后端程序会将该路劲连接为 image/20160704/evil.php%00filename.gif
00截断导致最终存储的文件名为evil.php
服务器端检测绕过(文件扩展名检测)
-
黑名单检测
黑名单检测通常会有一个文件后缀名黑名单(例如html|htm|php|php2|php3|php4|php5…)
但是通常黑名单检测不能包含所有的恶意脚本后缀,防护难度会比较大,推荐使用白名单
绕过的方法:
evil.asp%00.jpg
.htaccess文件攻击
如果黑名单中未包含.htaccess后缀的可以通过重写解析配置来达到解析的效果
针对php,上传自定义.htaccess
<FilesMatch "haha"> SetHandler application/x-httpd-php </FilesMatch>
同目录有个我们上传一个只有文件名并包含字符串”haha”,但是却无任何扩展名的文件
里面的内容是 php 一句话木马,通过菜刀连接可以解析php
成因:
在 PHP manual 中提到了下面一段话
move_uploaded_file section, there is a warning which states ‘If the destination file already exists, it will be overwritten.’
如果 PHP 安全没配置好
就可以通过 move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务器上的
这样就能任意定义解析名单了
- 解析漏洞(apache解析漏洞,iis6.0解析漏洞,nginx解析漏洞)
apache解析漏洞
apache是从右到左开始判断解析,如果最右的后缀无法解析,则尝试解析后一个后缀
iis6.0解析漏洞
.asp
iis7.0/7.5解析漏洞
对于php有一个类似Nginx的解析漏洞 evil.jpg/evil.php
解析evil.jpg中的php代码,这个漏洞成因在于php-cgi的漏洞
nginx解析漏洞
- 将php文件换成其他可以通过的文件后缀,访问的时候在后面加上/.php,即evil.jpg/.php,evil.jpg会解析为php的格式
- %00截断
-
其他方式
提交前将filename=”evil.php”该为”evil.php”.jpg”
- 白名单检测
- 0x00截断绕过
- 解析漏洞绕过(文件名不被重写)
服务器端检测绕过(文件内容检测)
图像类的文件内容检测
-
文件幻数检测(图片头格式检测)
jpg内容头value= FF D8 FF E0 00 10 4A 46 49 46
gif内容头value= 47 49 46 38 39 61
png内容头value= 89 50 4E 47
在文件头后加上一句话木马就能绕过
- 文件相关信息检测
图像文件相关信息检测常用的就是php的getimagesize()函数,可以通过修改图片的注释区(data区)插入一句话代码,如下:
GIF89a (...some binary data for image...) <?php phpinfo(); ?> (... skipping the rest of binary data ...)
- 文件加载检测
调用API或函数去进行文件加载测试,常见的是图像渲染测试,二次渲染,可以通过上传恶意文件,再下载下来,diff一下找到不变的位置插入一句话木马,但成功率不高
总结
轻量级检测绕过攻击
-
绕过 javascript 对扩展名的检测
<用 burp 之类的反向代理工具直接 POST 数据包到服务端,绕过前端检测> -
绕过服务端对 http request 包 MIME 类型检测
<用 burp 之类的反向代理工具伪造 POST 数据包到服务端,绕过 MIME 检测>
路径/扩展名检测绕过攻击
-
黑名单绕过
文件名大小写绕过
名单列表绕过
特殊文件名绕过
0x00 截断绕过
.htaccess 文件攻击
本地包含漏洞
Apache 解析漏洞
IIS 解析漏洞
Nginx 解析漏洞
-
白名单绕过
0x00 截断绕过
本地文件包含漏洞
IIS 解析漏洞
Nginx 解析漏洞
- 文件内容检测绕过攻击
以上所述就是小编给大家介绍的《07-04 【VULNERABLITY】文件上传学习总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 对文件上传的一些思考和总结
- Web渗透之文件上传漏洞总结
- web uploader 上传大文件总结
- Spring Boot + Vue 前后端分离,两种文件上传方式总结
- axios上传图片,koa2接收保存上传的图片,lrz在上传前压缩图片
- 前端实现axios以表单方式上传文件,优化上传速度
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Looking For a Challenge
the University of Warsaw / the University of Warsaw / 2012-11 / 0
LOOKING FOR PROGRAMMING CHALLENGES? Then this book is for you! Whether it's the feeling of great satisfaction from solving a complex problem set, or the frustration of being unable to solve a task,......一起来看看 《Looking For a Challenge》 这本书的介绍吧!