接着我上一篇绕waf文章,这篇主要总结一下利用mysql数据库的注释来绕过waf
首先介绍一下mysql数据库的注释符
在MySQL里,多行解释 是 /* */,这个是SQL的标准 但是MySQL扩张了解释 的功能比如注释/**/在起头的/*后头加了!变成了/*!*/
我们叫它为内联注释
又比如我们在内联注释!后加50001变成了/*!50001*/,那么这又是什么意思呢?
这里的50001表示的是 数据库是5.00.01以上版本,该语句才会被推行
我们在绕waf过程中,在构造payload绕过的同时还要注意把我们预期的sql语句可以带入数据库顺利执行,那么我们看上述三种注释在mysql中的运行情况:
可以看到我们在原先的select * from wy;基础上加上了注释符,它还会正常执行我们的sql语句
当前测试数据库版本为5.5,所以我们/*!50001 select * from wy */; 可以顺利执行
但/*!56001 select * from wy */; 不能顺利执行,原因就是我上面提到过的,这句要执行条件必须是数据库版本大于等于5.60.01,而我们当前版本为5.5
所以不能成功执行
了解了上面的东西后,我们便可以尝试使用注释符莱绕过waf了
这里测试用的是3.0版本的安全狗
payload如下: