目录
一.文件上传漏洞原理
web应用在文件上传过程中没有进行过滤,或者是过滤不严格,攻击者通过上传webshell等恶意文件对服务进行攻击,导致服务器沦陷。
二.文件上传漏洞条件:
1.有上传文件的功能
2.上传文件的目录,能够解析脚本语言(否者,405)
3.能够访问到上传的文件
符合以上三点,就可能存在文件上传漏洞。
三.上传限制手段分为两大类
(1)客户端校验
客户端校验就是Javascript校验等:修改客户端代码/上传过程修改
(2)服务端校验
MIME类型(后缀):上传过程修改MIME类型
扩展名校验:特殊扩展名/截断上传/解析漏洞
文件内容:上传图片木马/代码混洗
四.具体实现
1.文件上传漏洞——绕过JS检测
2.文件上传漏洞——绕过MIME类型检测
请求行中的conTent-TYPE:
用bp截取数据包,修改concent-type。
3.文件上传漏洞——绕过黑名单检测
黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件扩展名,如:php、asp、aspx;
绕过方式:(1)
使用大小写绕过(针对对大小写不敏感的系统如windows),如:PhP;
流程
(1)上传正常的php文件,无法上传;
(2)将文件后缀.php修改为.Php;
(3)上传.Php文件,上传成功;
绕过方式:(2)
黑白名单绕过(php、php2.php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx、cdx)
流程
(1)上传正常的php文件,无法上传;
(2)将文件后缀.php修改为黑名单中不存在的后缀
(3)文件上传成功;(上传成功了也不一定会执行,需要看服务器是否支持)
绕过方式:(3)
特殊文件名绕过(后缀加.或者空格)
修改数据包里的文件名改为test.php.或者test.php(有空格)
由于这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统会自动去掉点和空格。 Unix/Linux系统没有这个特性
绕过方式:(4)
面试回问到,但其他时候一般没什么用,因为现在版本修复了
0x00截断绕过文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语 言函数中,处理
字符串的函数中0x00被认为是终止符。
(1)上传正常的php文件,无法上传
(2)将文件后缀.php修改为.php.jpg上传,burp抓包16进制模式php后面添加00;
(3)文件,上传成功;
绕过方式:(5)
.htaccess文件攻击
修通过move uploadedfile函数把自己写的.htaccess文件覆盖掉服务器上的这样就可以解析定义名单了.
.htaccess文件用处:
通过.htaccess文件调用php解释器去解析一个文件名中只要包含“aa”这个字符串的任意文件,无论你文件名是什么样子,只要包含”aa”这个字符串,都可以被以php的方式来解析。
(1)上传正常的php文件,无法上传
(2)将文件修改为文件名带aa的,后缀随便,例:aa123.txt;
(3)文件,上传成功;
代码:
<FilesMatch"aa" > SetHandler application/x-httpd-php </FilesMatch>
4.解析绕过
1)Apache解析漏洞
一个文件名为test. php.aaa. bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么 Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的扩展名为止。
2)IIS解析漏洞
#1 IIS6.0
@1:新建一文件名字为:任意文件名.asp; 任意文件名jpg 此文件会当成脚本运行 (1.asa;1jpg,2.cdx;2.txt)
@2:新建一个文件夹,名字为任意文件名.asp;
那么在这个文件夹里的内容全部会被当场脚本取运行。
@3:服务器配置错误(put 协议)
这里一般会和MOVE协议一起使用,先上传txt文件,在将txt文件修改为执行文件,php,aspaspx。移动并改名,但你要有他的原文件的路径
#2 IIS7.0,7.5
@1:正常路径:uploads/1jpg
@2:把php文件修改后缀为jpg进行上传
@3:黑客思路:uploads/1jpg/任意文件名.php 访问方式
@4:这个文件就会被当成脚本去执行。
3)Nginx解析漏洞
#1
@1:正常路径:uploads/1.jpg
@2:黑客思路:uploads/1.jpg/任意文件名.php 访问方式
#2 Nginx 0.5.* Nginx 0.6.* Nginx0.7
对低版本的Nginx可以在任意文件名后面添加%00.php进行解 析攻击。
正常路径:uploads/1jpg
黑客思路:uploads/1.jpg%00.php 当做正常脚本执行
#3 Nginx 0.8.41~1.4.3 ;1.5
在linux系统里,以上Nginx容器的版本下
正常路径:uploads/1jpg
黑客思路:uploads/1.jpg%20%00.php 当做正常脚本执行
5.图片码绕过
把代码文件和图片文件进行二进制编码合并形成新的图片,进行上传.注意2.php代码最前面需要有一个空格
cmd下执行:建议使用小图片
window和linux合层图片木马的命令
copy/b 1.jpg+2.php=3.jpg
五.文件上传漏洞的威胁
1.上传webshell,控制服务器,远程命令执行。
2.上传系统病毒,木马文件进行挖矿。
3.进行提权操作。
4.修改web页面,制作钓鱼网站,挂马。
5.进行内网渗透。
六.文件上传漏洞的防护
1.前端校验,后端校验。
2.对MIME类型进行检验。
3.创建黑白名单,进制执行文件上传。
4.隐藏上传的路径。
5.将上传的文件名更改。
七.文件上传的绕过方法(总结)
1.前端绕过
2.MIME类型绕过
3.后缀大小写绕过
4.00截断攻击
5.双写文件后缀绕过