文件上传成因
如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。很多原因导致文件上传漏洞,有以下几类:
1:服务器的错误的配置。
2:开源编辑器漏洞。
3:本地上传限制不严格被绕过。
4:服务端过滤不严格被绕过。
漏洞危害
可能会造成网站被控制,服务器沦陷 甚至同一服务器的其他网站都沦陷
一般上传检测框架
客户端验证
服务端检测绕过
服务端MIME验证
MIME检测的是数据包content-type字段。常见的图片格式的MIME类型有三种类型:1(PNG图像:image/png),2(GIT图像:image/gif),3(JPG图像:image/jpeg)
服务端拓展名验证
黑名单
可以尝试文件名大小写
pHp
AsP
pY
特殊文件名
在Windows’下有一个特性就是如果文件后缀以点‘.’
或者空格' '
结尾的后缀名时,系统在保存文件时会自动去除点和空格。但要注意Unix/Linux系统没有这个特性。
.php5
.php3
这种格式一般不会被解析执行
.htaccess
文件攻击
.htaccess
文件是Apache服务器中的一一个配置文件,它负责相关目录下的网页配置。通过htaccess
文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。如果服务器对文件名控制不够严格,通过move_ uploaded_ file
函数把自己写的.htaccess 文件覆盖掉服务器上的这样就可以解析定义名单了。
1 | .htaccess文件内容: |
通过.htaccess
文件调用php
解释器去解析一个文件名中只要包含"haha"
这
个字符串的任意文件,无论你文件名是什么样子,只要包含”haha"
这个字符
串,都可以被以php
的方式来解析。
白名单
0x00
截断
文件名后缀有一个%00
字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00
被认为是终止符。例如:网站上传函数处理xx.asp%00.jpg
时,首先后缀名是合法的jpg
格式,可以上传,在保存文件时,遇到%00
字符丢弃后面的jpg
,文件后缀最终保存的后缀名为xxx.asp
url
编码组成:百分号+字符的ascii
编码的十六进制,所以空格url
编码为%20。空格的十六进制为0x20
上传文件的时候在burp-hex
编码里找到上传文件结尾加空格的20改成00就可以构成00截断。但00截断只在asp程序上比较有效。