记录一下2018年对sql注入绕过安全狗及云锁的方法
先搭建两个虚拟机,一个安装安全狗,一个安装云锁
页面源码如下
安全狗绕过
首先通过1’and’1’=’1
和1’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表情,此处直到结束也不再被拦截。
最后一步,得到数据。
至此,云锁已被成功绕过。