黑名单验证的突破包括:
- 操作系统特性:
1)大小写
2).绕过
3)空格
4)::$DATA
- 语言特性:
1)00截断
2)特殊可解析后缀
- 中间件特性:
1)解析漏洞
2).htaccess
- 代码不严谨:
1)双写后缀
2)对于空格,点等只做单次过滤
操作系统特性:
- Windows操作系统对大小写不敏感,即php和Php在Windows看来是一样的
- Windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中的内容和所上传的文件内容相同,并被解析。即上传文件xxx.php::$DATA = xxx.php
- Windows系统下文件名结尾加入., ,<,·>,>>>,0x81-0xff等字符,会被Windows自动去除
语言特性:
语言 | 可解析后缀 |
php | php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtml |
jsp | jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml |
asp/aspx | asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr |
中间件特性:
- 解析漏洞:
iis6.0,iis7.0/7.5,iis8.0/10.0
apache
nginx
tomcat
……
- .htaccess
代码不严谨:
- 双写绕过,比如我们写1.AsaspP 上传后他可能会通过匹配到关键字asp并将其删除,这样我们的文件就变成了1.AsP
- 对于空格,点只做了单次过滤
测试思路:
- 使用字典+burp,去fuzz后缀名寻找成功上传的思路
- 手工测试