一般绕过会分为黑名单绕过、白名单绕过、特殊类型绕过
以下为文件上传后缀绕过
黑名单绕过
1、大小写绕过
eg : a.JSP、a.Jsp 、a.jsP、a.jSP等等
2、空格绕过
一般保存文件名前后带空格,保存时都会被忽略掉
而php在传输中,可识别
eg:黑名单过滤中只有".php",没有".php "、“ .php”
空格filename.php
filename.php空格
3、点号绕过
文件后缀加点,保存后系统自动过滤末尾的点
eg:"a.php.",黑名单没有对"php."过滤,则绕过
4、::$data绕过(只适用于windows)
a.php::$data 相当于访问a.php
ab:a.php::$data 相当于访问ab文件夹下的a.php
eg: a.php改为 a.php::$data
5、单次过滤绕过
思路:已知过滤规则,假如都是过滤一次,则可尝试两次绕过
6、后缀双写绕过
场景:过滤规则检测到黑名单后缀时,将文件名中对应后缀删除的情况
eg:a.pphphp 从左到右识别,识别第二到第四位的php时,即"pphphp",判定后缀名存在黑名单,将识别到的php删除,后缀只剩下字符组合php,故此时变为a.php
程序认为处理完毕,不拦截,故绕过
白名单绕过
1、MIME类型绕过
MIME多用途网络邮件扩展类型,称为Content-type
eg:若后台根据MIME判断文件类型,则存在绕过
改为没允许上传的类型,即可绕过验证
2、路径栏00截断绕过
条件:
1)php版本<5.3
2)配置文件php.ini中magic_quotes_gpc必须为off,上传路径可控
原理:
0x00是字符串的结束标识符
攻击者可利用手动添加标识符的方式将后面的内容进行截断,标识符后面的内容可以帮我们绕过检测
%00是结束符的url编码格式
eg:允许上传.jpg,不允许上传.php,如何绕过传.php一句话木马呢?
选中a.php(写入一句话木马)上传并抓包,修改文件保存路径和文件名
保存路径(带参数:/upload/test/index.php?save_path=../upload/aa.php%00):../upload/ 改 ../upload/aa.php%00
文件名(filename):a.php 改 a.jpg
最后会拼接为:../upload/aa.php%00a.jpg
过滤规则只对文件名生效,目标允许jpg上传,可绕过
3、数据栏00截断绕过
路径作为数据传入,使用00截断,不能使用%00(文件保存路径是作为数据传输,而不是URL中)
00截断方法:
1)文件保存路径添加文件名+任意符号
../upload/test.php;
2)修改文件名的后缀为允许上传的后缀(及白名单中的内容)
上传的test.php可以修改为test.jpg
3)将特殊符号";"的16进制编码修改为00
此时发包就可以绕过一些过滤
4、图片马检测绕过
图片马
特殊类型绕过