upload-labs总结

1、javascript本地js判断是否是非法文件
突破方式:禁用本地js脚本执行

2、文件类型判断MIME判断,content-type(Mime-Type)判断是否是符合要求的文件
突破方式:可通过抓包修改content-type类型突破
常见的文件扩展名对应的content-type
.*(二进制流)====application/octet-stream
.asp====text/asp
.bmp====application-x-bmp
.doc====application/msword
.gif====image/gif
.html====text/html
.ico====image/x-icon
.img====application/x-img
.java====java/*
.jpeg====image/jpeg
.jpe====image/jpeg
.jpg====application/x-jpg
.jsp====text/html
.mdb====application/msaccess
.mhtml====message/rfc822
.mp4====video/mpeg4
.pdf====application/pdf
.png====application/x-png
.ppt====application/x-ppt
.tif====image/tiff
.tiff====image/tiff
.top====drawing/x-top
.xhtml====text/html
.xls====application/x-xls
.apk====application/vnd.android.package-archive
.avi====video/avi
.class====java/*
.css====text/css
.dll====application/x-msdownload
.exe====application/x-msdownload
.htm====text/html
.js====application/x-javascript
.mdb====application/x-mdb
.mp3====audio/mp3
.png====image/png
.ppt====application/vnd.ms-powerpoint
.rmvb====application/vnd.rn-realmedia-vbr
.rpm====audio/x-pn-realaudio-plugin
.torrent====application/x-bittorrent
更多(https://tool.oschina.net/commons)==HTTP Content-type、HTML转义字符、RGB颜色参考、ASCII对照表、HTTP状态码详解、TCP/UDP常见端口参考、网页字体参考

3、扩展名绕过,部分扩展名会按照解析进行自动解析成php,如php3、phtml等,跟配置有关,可通过修改AddType application/x-httpd-php .php .php3 .phtml进行防护,高版本php无此问题

4、过滤掉了常见的危险扩展名,但是没有过滤.htaccess文件
突破方式:利用上传.htaccess文件将其他扩展名进行php解析
<FilesMatch “phpinfo.jpg”>
SetHandler application/x-httpd-php
</FilesMatch>
将phpinfo.jpg按照php文件解析
SetHandler application/x-httpd-php
将所有扩展名按照php解析

5、大小写绕过,通过将扩展名php大小写变形来绕过.phP

6、空值比较绕过,如果没有做空值处理,那么会将空格参与进字符串比较
突破方式:扩展名末尾加空格

7、windows特性漏洞,文件中最后一个字符如果为点或者为空格,在参与比较的时候点会参与比较,但是上传到windows系统中后点会自动省去,实现文件.php.保存成.php

8、windows特性漏洞,文件扩展名后面加上::$DATA,php在window下如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名.并且保持”::$DATA”之前的文件名

9、危险字符如果置空可以利用双写绕过.pphphp

10、%00截断和0x0截断,前者适合get方式传输,后者适合post方式传输

11、图片马上传后利用文件包含漏洞进行图片马解析,适用于服务器存在文件包含漏洞的情况下
样例payload:IP/include.php?file=./upload/9320200121150616.jpg
图片马通常需要多种变形,尤其是在关键块处要保证是图片特征,用于绕过一些图片判断函数,如:exif_imagetype() 、getimagesize()

12、二次渲染保护
突破方式:通过查找不变块,将恶意代码插入不变的块中来达到不被修改的目的,gif较为容易,jpeg和png突破需要计算CRC校验和其他关键块数据

13、条件竞争,主要出现在将上传的文件不做修改临时存储,然后再通过服务器修改或删除,这是一种很危险的做法。开发的时候需要秉着不能让用户的任意文件再服务器上有存储过程,哪怕几微秒也不行。

其他的一些比较骚的绕过姿势基本上就得代码审计发现了,比较有针对性的绕过。

14、其他中间件本身或系统本身存在的一些小的问题造成的文件上传漏洞
IIS6.0文件解析漏洞
1、以*.asp命名的文件夹里面的文件都会当作ASP文件执行
2、*.asp;.jpg类似的畸形文件分号后面的会被直接忽略
IIS7.0文件解析漏洞(配置不当引起)
php.ini里面的cgi.cgi_pathinfo=1
IIS7需要再Fast-CGI模式运行(没配置CGI不行)
ip/shell.jpg/.php可以实现解析

Apache解析漏洞
1、Apache1.x和Apache2.x存在
解析规律,当遇到不认识的扩展名的时候,会从后向前解析,直到到达认识的扩展名,如果都不认识,则会爆出源码
shell.php.rar.xx.aa
2、CVE-2017-15715漏洞,可以利用其上传一个包含换行符的文件0x00里面\x0A,即在shell.php后面用hex增加一个\x0A

Nginx空字节代码执行<8.03版本
也就是%00截断了
xxx.jpg%00.php

个人理解的防御避免方法:
本着一个原则,不能相信用户上传的任何数据。
1、能用白名单过滤不用黑名单
2、文件内容检测,避免文件中出现任何脚本代码
3、动态文件路径,避免攻击着更容易拿到文件位置,可以将上传的一个文件只保存到一个文件夹,文件夹的名字进行hash处理,然后随时间戳动态变化
4、重命名文件名,可以利用时间戳来变化文件名
5、多次渲染(即便能成功,攻击难度也是很大的)
6、截图处理,一般适合在头像位置,将图片进行截图处理
7、上传路径权限降低,使其任何人没有执行权限

说点什么
请务必填写正确的邮件地址,当有回复时您会收到邮件提醒。
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...