
WAF检测机制其实很简单,核心就是正则匹配,(就是你们学过的正则匹配),虽然说还有字符串强行匹配,还有什么语义解析,但是实际上还是正则居多。


我们先来安装一个waf,这里我用的是安全狗。

在安装waf的时候,一定要把容器的运行模式(这里我用的是phpstudy)调成系统服务。

拼接mysql语句,成功拦截
通过正则匹配,如果符合规则,就拦截。and 1=1拦截

我们这个进行XSS,被狗拦截

但是在传参前面加个合法的txt文件就绕过了,不过这只适合低版本的狗。

我们的sql语句必须要连起才会被生效,比如 and 1=1 会被拦截,而单独的and 是不会拦截的。


数据库可以识别这个&为 and 的意思

但是在url栏里就失效了。

所以我们要去编码一下。把&变成url编码

现在就正常了

还有一些更骚的操作
2-1

1*2也是正常

也可以用16进制表示1

这里提醒一点,绕waf的时候,不要想着用编码绕过,因为可能他不会给你解码。
在这里要讲一个东西叫做内联注释。
内联注释是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!../中,
这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别,执行。
/!50001*/表示数据库版本>=5.00.01时中间的语句才能被执行


那么我们现在来测试哪个版本可以绕过,但是又可以运行的的版本。

拿来爆破一下,看哪个版本可以绕过,但是又可以运行的的版本。
把这个5002换了就是了


我们测试到10044可以正常运行。




?id=1 union /*!10044select*/ 1,password,3 -- qwe/*%0afrom admin limit 0,1%23*/
10044select 内联注释
%0a 换行
%23 注释
ps:-- qwe和%23都只能单行注释
这条语句也可以

可以理解为注释+换行来实现绕狗



Apache
同时传入2个参数,她会以后面个参数为准。

waf会认为有注释,而不去拦截,但是里面的参数又会被网站执行。

用上面的语句,执行成功!!!!!!


正常多的数据被拦截了,那么我们就多弄点数据,看会不会别拦截


&spm=1001.2101.3001.5002&articleId=108941522&d=1&t=3&u=73014e3eb5e949948b7480c97251dd34)
188

被折叠的 条评论
为什么被折叠?



