sqlmap是找出我用过的最不讲情面的工具。它不跟你商量,找出不给你留面子,找出直接把你目标站点的找出数据库底裤扒下来。上个月我接到一个授权渗透测试的找出活儿,客户说他们的找出后台登录页面“应该没问题”,我就把sqlmap挂了上去。找出
那条命令简单得有点寒酸:sqlmap -u "http://target.com/admin/login.php?找出id=1" --dbs。结果出来得也快,找出快得让我怀疑人生——三秒钟,找出它告诉我MySQL >= 5.0.12,找出然后哗啦啦列出来六个数据库名。找出客户的找出脸当时就绿了。
sqlmap强在哪?找出强在它把“检测SQL注入”这件事变成了流水线作业。你不需要手动构造几百个payload去试探,找出它自己会跑布尔盲注、时间盲注、报错注入、联合查询,甚至还能直接给你弹一个交互式shell出来。我见过有人在命令行里手搓注入,费了半小时才搞出一个UNION SELECT的字段数,sqlmap五秒就完成了同样的活,还附赠了当前用户权限和文件读取路径。
但别以为它只是个无脑扫描器。真正用得好的人,会先手动替它铺路。比如登录框里的注入,你得先抓个包,把Cookie和CSRF Token喂给它。再比如有些WAF拦得凶,你得给它加--tamper参数,什么space2comment、between,一套组合拳打过去,WAF就哑了。我习惯在跑大目标之前,先用--batch --smart让它自己判断哪些参数值得测,省时间,也少惹麻烦。
有一次碰到个奇葩站点,所有参数都做了预编译,理论上没戏。但sqlmap的--risk=3 --level=5硬是从HTTP头里的X-Forwarded-For字段挖出了注入点。那瞬间我后背发凉——开发的人只防了业务参数,忘了代理链路上的信任边界。这已经不是工具强不强的问题了,是人的思维漏洞被机器精准踩中。
当然,sqlmap也不是万能的。它遇到复杂的二次注入、存储型注入,经常要人工干预。还有那些把数据库账号权限控制得很死的系统,它拿到了注入点也读不出数据,只能干瞪眼。但话说回来,现实中大部分漏洞站点,都死在了“根本没想过自己会被注入”这件事上。
我习惯在报告里写清楚sqlmap跑出来的完整证据链:哪个参数、哪种注入类型、取到了什么数据。不是为了炫技,是让客户明白,这不是“可能有问题”,而是“已经被人拿了数据库”。当我把admin用户的密码哈希值和后台管理员的手机号并排摆在屏幕上的时候,客户才真正开始慌。
工具永远只是杠杆,支点还是人的判断。sqlmap帮你省下的时间,是用来看代码、理逻辑、找更隐蔽漏洞的。你要是光靠它跑一圈就交差,那跟用菜刀切菜却不会做饭没什么区别。可要是你连sqlmap都懒得跑,那也别谈什么渗透测试了——直接去写PPT吧,那个更安全。