文件上传漏洞总结篇
文件上传漏洞总结
漏洞位于:只要能上传文件的地方皆有可能出现文件上传漏洞
寻找漏洞:寻找能上传文件的地方,文本编译器
攻击方法:任意文件上传,后缀大小写绕过,文件类型绕过,双写后缀名绕过,请求特殊后缀绕过,图片木马合并上传,文件00截断绕过,截断攻击%和&,web服务器环境配置寻找漏洞 例如:IIS6.0的解析漏洞
任意文件上传:
直接上传没有任何防御措施
后缀大小写绕过(成功概率很小,暂时没有成功过)
例子:shell.php 改为:shell.Php, shell.pHp, shell.PHP
文件类型绕过:
现在大部分都进行了文件类型判断,通过Content-type头判断
这里拿DVWA的中级防御来进行示范
Php代码:
直接上传百分百失败,先把1.php改为1.jpg。上传的时候用burpsuite截断,将1.jpg改为1.php
即可绕过此防御。
符合条件,所以上传成功。
双写后缀名绕过:
例子:shell.jpg 变为jsp则 shell.jspsp
Shell.jpg 变为 php 则 shell.jphphp
.........
双写后缀名绕过虽然可以上传成功但是,无法连接到菜刀,所有
只能用于恶意上传并不能获取服务器权限。
特殊后缀名上传:
将上传的文件的后缀名改为一些不常见的,如
- 1.php 变为 1.vbs
- 1.php 变为 1.php0
此操作也不能获取服务器权限
图片马合并上传:
在特殊的一些服务器环境里或文件包含漏洞,可以使用
如:IIS6.0的解析漏洞
1)当建立*.asa,*.asp格式的文件夹时,其目录下的任意文件都会被IIS当做asp文件解析。
2)当上传的文件为*.asp;1.jpg时,IIS6.0同样以ASP脚本来执行。
3)实例:http://blog.sina.com.cn/s/blog_7fe448c70101ab7u.html
在挖掘到一个文件包含漏洞的时候,上传图片马。利用本地文件包含图片马
从而获取服务器权限。
实例:https://www.jianshu.com/p/0cc01ee0d247
文件0x00截断上传:
有些文件系统读到0x00的时候就不会在读,导致了截断。
例子:上传 shell.jsp0x00jpg,会把jpg后缀给过滤掉
导致shell.jsp上传(请求成功,但实际上无数据)
截断文件将20改为00:
例子:将shell.php上传用burosuite抓包,改为shell.php +空格+shell.jpg=shell.php shell.jpg
到Hex,找到文件名哪行的20改为00。
例子:https://blog.csdn.net/yiyefangzhou24/article/details/8986281
文件上传漏洞测试手段:
一些常见的web配置环境所出现的漏洞:
IIs6.0:(这里的IIS环境有很多类似的漏洞记得百度)
4)IIS6.0:当建立*.asa,*.asp格式的文件夹时,其目录下的任意文件都会被IIS当做asp文件解析。
5)当上传的文件为*.asp;1.jpg时,IIS6.0同样以ASP脚本来执行。
Apache 1x或2x:
当apache遇见不认识的后缀名会从后向前解析,例如:1.php.rar。他不认识rar就向前解析,直到他认识的后缀名。
PHPCGI(Nginx)(这个不是phpCGI独有的漏洞有时候在IIS也会出现):
当上传1.jpg之后。访问1.jpg/1.php。此时的1.jpg会被当做php来解析。
文件上传漏洞常见的防御手法:
1)前端JavaScript验证 (发现有只前端验证的话,手动写一个文件上传的html将action设置为判断文件即可。)例如:
检测上传文件的是:upload.php 但是服务端没做判断,前端做了判断。
<form action=’http://xx/upload.php’ method=’post’>
<input type=’file’ name=’file’ id=’file’><br>
<input type=’submit’ value=’提交’>
</form>
2)服务端检测(黑白名单验证,Content-Type判断) 上面已经说过如何绕过服务端验证。
黑名单检测绕过方法:如上
白名单检测方法:白名单并不能完全防御住,上传漏洞。可以通过web环境配置的缺陷与
其他漏洞一起利用。
文件上传防御方法:
服务端白名单防御。注意修复web环境带来的漏洞与其他漏洞。