——文件上传漏洞简介
如果不对被上传得文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件,
脚本到服务器上,进而进一步导致服务器沦陷。
原因导致文件上传漏洞类型:
1: 服务器的错误的配置
2: 开源编辑器漏洞。
3: 本地上传限制不严格被绕过
4: 服务端过滤不严格被绕过
——检测绕过
–客户端javascript(检测文件扩展名)绕过
在上传过程中将文件格式修改为可上传的文件格式,然后通过抓包,将文件修改为原来格式。
例如:网页需上传jpg格式文件,而我想要上传php文件,可以先将php改为jpg,然后在提交时抓包,将文件后缀再更改为php。
–服务端MIME类型检测(检查Content-Type内容)绕过
MIME检测的是数据包content-type
字段。常见的图片格式的MIME类型有:PNG:image/png,GIF:image/gif,JPG:image/jpeg
上传文件后,进行抓包,将content-type
字段修改。
–服务端目录路径(检查跟path参数有关内容)检测绕过
1、0x00截断绕过
2、在文件上传时,有的程序允许用户将文件放到指定的目录中,如果指定目录存在就将文件写入目录,若不存在则先建立目录,然后写入。
在HTML页面有一个隐藏的表单,它默认提交的文件夹名称为value
的值。使用 burpsuite 将 value 值改为 pentest.php
并提交上传一句话木马文件,如果服务器不存在此目录,则会创建此目录,然后将一句话木马写入该目录,如果是 IIS 6.0 ,则会解析网页木马。
–服务端文件扩展名检测(检测跟文件extension相关的内容)–
黑名单检测,在下面会具体讲黑名单检测绕过方式。
–服务端文件内容检测(检测内容是非合法或含有恶意代码)
1、 文件幻术检测
2、 文件相关信息检测:图像文件相关信息检测常用的就是 getimagesize()函数 只需要把文件头部分伪造好就 ok 了,
3、 文件加载检测:调用API或函数去进行文件加载测试,常见的是图像渲染测试,更变态的是进行二次渲染。
对渲染/加载测试的攻击方式是代码注入绕过。
对二次渲染的攻击方式是攻击文件加载器自身。
注意: 文件内容检测时,检测内容是否合法,有可能还会把内容敏感字符过滤掉或者转移掉,并且在自动将文件后缀名转化为某格式。我们需要通过大小写混写,双写等绕过方式来尝试绕过。
——绕过方式
——黑名单检测绕过
黑名单检测绕过:
1、 大小写组合绕过:pHp,AsP
。
2、 特殊文件名绕过:在windows下有一个特性就是如果文件后缀以点'.'
或者空格' '
,结尾的后缀名时,系统在保存文件时会自动去除点和空格,但要注意Unix/Linux系统没有这个特性。
在burp中修改,因为windows系统不被允许。
3、 修改文件扩展名时,有时候会过滤很多文件后缀名,导致无法绕过文件扩展名检测,我们可以使用畸形后缀名来绕过
,以下是畸形后缀名表:
4、 文件大小绕过:有时候会限制上传文件的大小,如果只限制最大值,我们可以尽可能用小的文件去尝试绕过,如果文件只限制最小值,我们可以往文件内容中尽可能加入垃圾信息来扩大文件的大小。
5、 0x00
截断绕过(php版本<5.3.4,php配置magic_quotes_gpc
关闭):文件名后缀有一个%00
字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。
例如:网站上传函数处理xxx.asp%00.jpg
时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢面后面的.jpg,文件后缀最终保存的后缀名为xxx.asp
Get方式:在url中输入%00
来进行截断。
Post方式:通过burpsuite
抓包将获取包中asp后面加上一个空格' '
,通过hex编码,将空格的hex编码20
修改为00
来绕过。
6、 htaccess文件攻击:是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:
网页301重定义、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
如果服务器对文件名控制不够严格,通过move_uploaded_file函数把自己写的.htaccess文件覆盖服务器上的这样就可以解析定义名单了。
.htaccess文件内容:
<FilesMatch "haha"> SetHadnler application/x-httpd-php </FilesMatch>
同目录中有上传一个文件名