实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1. 后缀名检测绕过
2. MIME类型检测与绕过
3. 文件内容检测与绕过
4. 00截断绕过
5. 条件竞争检测与绕过
后缀名检测的绕过方法也有很多,常见的有:
1. 黑名单--大小写绕过
2. 黑名单--名单列表绕过
3. 黑名单--Windows特性(末尾的点【.】)绕过
4. 黑名单--Windows特性(空格【 】)绕过
5. 黑名单--Windows特性(::$DATA)绕过
6. 白名单(需要结合文件包含漏洞或者Web服务器解析漏洞)
7. .htaccess文件攻击--匹配文件内容
8. .htaccess文件攻击--配皮文件名中的关键字
9. .htaccess文件攻击--匹配文件名
10. Apache解析漏洞
一些特殊的文件命名方式在Windows下是不被允许的,利用Burp Suite工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。
注:此方法只适应于Windows,因为Unix/Linux系统没有这个特性。
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload5.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传
6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
7、切换到“Proxy”代理模块的“Options”,查看Bp的代理
8、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
9、点击“submit”按钮,再次上传文件,Bp成功抓取数据包
10、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.,依然上传失败,后缀名不允许有.出现
11、利用Windows特性,给文件名加“(空格)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php ,依然上传失败,此文件不允许上传
12、关闭浏览器代理,重新选择脚本文件
13、再次打开浏览器代理,点击“submit”按钮,上传文件并抓取数据包
14、利用Windows特性,给文件名加“(::$DATA)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php
15、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传
16、关闭浏览器代理
17、访问http://ip/upfile/2/upload/info.php::$DATA,解析失败,未找到上传的文件,因为Windows的特性会自动去掉“::$DATA”,info.php::$DATA文件会变为info.php
18、访问http://ip/upfile/2/upload/info.php,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,“【::$DATA】”在Windows下是不被允许的,利用Burp Suite抓包在文件后缀名处添加“【::$DATA】”,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的::$DATA。