SQL注入绕过安全狗、云锁

记录一下2018年对sql注入绕过安全狗及云锁的方法

先搭建两个虚拟机,一个安装安全狗,一个安装云锁

页面源码如下

安全狗绕过

首先通过1’and’1’=’11’and’1’=’0判断是否存在SQL注入。结果页面显示被安全狗拦截。

这里猜测安全狗拦截的可能是1’and’1’=’1这样的字符串,我们换一个表述方法,将and用%26%26进行替换,%26是&的URL编码形式,在SQL查询中也是and的意思,发现绕过安全狗拦截

根据页面显示不同,我们得到结论:存在SQL注入。

下一步是得到数据库名称,前面说明使用报错注入,报错注入函数最常用的是updatexml(),经过测试,发现updatexml(1,2,3)这种格式也被安全狗所拦截。

在MySQL中,/*!*/是内联注释,被包裹在其中的内容依旧会被执行,这里通过内敛注释包裹括号里的内容来绕过安全狗的拦截。

绕过安全狗拦截后,继续得到数据库名称。测试发现database()也被安全狗拦截,再次使用内联注释包裹括号来进行绕过。这里要注意:内联注释之中不支持再使用内联注释,所以将updatexml的内联注释只包裹一个左括号。

拿到数据库名称之后,下一步拿到表名。在这里发现只要出现select就被拦截,而使用内联注释也无法进行绕过。经过多次尝试绕过技巧后得到结论:两次内联注释中加入12345便可成功绕过。

拿到表名后,下一步得到列名,在这里仿照拿到表名的方法进行注入即可得到列名。

拿到列名后,最后一步,得到数据。

成功拿到用户名admin和密码1,至此安全狗已成功绕过。

云锁绕过

绕过的步骤我们仿照联合查询注入来进行。首先来判断是否存在SQL注入

看到页面显示不同,说明存在SQL注入。

其次尝试获取列数,使用order by 进行判断。发现order by这个关键字被云锁拦截

在这里经过多次尝试后发现,在order by之间插入/*%26*/便可绕过拦截。

绕过云锁后,经过多次尝试获取列数,发现数字为6时正常,为7时错误。所以列数为6。

得到列数之后,要通过union select获取显示位,发现union select被拦截

再次在union select之间增加/*%26*/,成功绕过拦截,并得到显示位。

得到显示位2、4、6。接下来使用database()得到数据库名称,被拦截。

在database ()之间插入/*%26*/,再次绕过拦截,成功得到数据库名称

得到数据库名称后,需得到列名。在此处select…from被拦截,且使用/*%26*/依旧被拦截。在前面的waf绕过技巧中有提到emoji表情,经过偶然尝试,发现添加了emoji表情的/*%26*/可以绕过此拦截。

得到表名后,下一步是得到列名,由于emoji表情,此处直到结束也不再被拦截。

最后一步,得到数据。

至此,云锁已被成功绕过。

本文标题:SQL注入绕过安全狗、云锁

文章作者:暮沉沉

发布时间:2019年11月08日 - 14:11

最后更新:2019年11月08日 - 14:11

原始链接:http://maplege.github.io/2019/11/08/sqli-bypass-waf/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------