凌晨两点,使用我盯着awvs的探测统漏扫描报告,后背发凉。使用一个不起眼的探测统漏“High”级别漏洞,标在某个客户官网的使用登录接口上——SQL注入,参数id,探测统漏连过滤都没做。使用这不是探测统漏我第一次用awvs扫出问题,但每次看到这种裸奔的使用代码,还是探测统漏忍不住骂一句:写这玩意儿的人,真当黑客是使用吃素的?
awvs,全称Acunetix Web Vulnerability Scanner,探测统漏是使用个老牌商业扫描器。它不像nmap那样广撒网,探测统漏也不像burp suite那样全靠手动操作。使用它干的事很直接——模拟黑客攻击,把常见的web漏洞翻个底朝天。装上它,填个URL,点“Scan”,剩下的交给它跑。几分钟后,一份带颜色标记的报告就出来了:红的是高危,橙的是中危,黄的是低危。但别被这界面骗了,它可不是什么傻瓜工具。用得好,它是你渗透测试的左膀右臂;用得糙,它就是个会报错的玩具。
我第一次正经用awvs,是在一家电商公司做安全评估。对方技术总监拍胸脯说系统“绝对安全”,我半信半疑地输入了他们的后台地址。扫描跑到一半,awvs弹出一个“Blind SQL Injection”的提示,位置在订单查询功能里。我没声张,顺着提示手动验证了一下——用时间盲注,构造了个`sleep(5)`的payload,页面果然卡了五秒才加载出来。那一刻,技术总监的脸色比awvs的红色标签还难看。
awvs的厉害之处,在于它不光是扫描,还自带漏洞验证逻辑。比如检测XSS时,它会尝试注入脚本,然后看响应是否原样返回;检测文件上传时,它会试着传个带恶意后缀的文件,看服务器是否接受。这些动作,靠人工一个个试,费时费力,awvs几分钟就能跑完几百个测试用例。但你也别指望它全对——误报这事,它干得不少。有一次它报了个“Remote Code Execution”,我激动半天,结果点开详情一看,是它把一个正常的参数拼接误判成了命令执行。所以,awvs的报告只能当线索,不能当结论。真正的漏洞,得靠你手动确认,甚至写个PoC去验证。
用awvs还有个窍门:别一上来就全站扫描。目标太大,容易触发WAF,或者直接把服务器扫宕机。我习惯先扫登录页和API接口,这些地方往往是最脆弱的入口。拿登录页来说,awvs会测试弱口令、暴力破解、验证码绕过,甚至检查会话管理是否严谨。有一次,它扫出一个“Session Fixation”漏洞——服务器在用户登录前就发了个session ID,登录后也没更换。这种问题,代码审计时容易忽略,但awvs用几个请求就揪出来了。
再提一句,awvs的爬虫能力也不赖。它能抓取动态页面里的AJAX请求,不像某些扫描器只会傻乎乎地抓静态链接。我遇到过不少单页应用,前端全用JS渲染,普通扫描器扫了个寂寞,awvs却能顺着XHR请求摸到后端接口,然后对每个参数做fuzz。这点很实用,尤其是现在前后端分离的项目越来越多。
不过,工具终究是工具。awvs再强,也替代不了人的判断。它扫出漏洞,你得知道这个漏洞实际能造成多大危害——比如一个存储型XSS,在后台管理页面和在前台评论区,严重程度完全不同。awvs只会标“Medium”,但结合业务场景,你可能得自己把它升到“Critical”。反过来,有些它报的“Low”级别问题,比如TLS配置过旧,如果客户压根不涉及敏感数据传输,那优先级就得往后排。
回到开头那个SQL注入。我后来联系了客户,对方开发小哥一脸无辜:“参数不是用了intval()吗?”我看了眼代码,确实用了,但用在了错误的位置——查询语句里拼接的还是原始字符串。awvs能扫出结果,但为什么出错,得靠人去看。最后修了三行代码,问题解决。整个过程,awvs只花了一小时,而沟通和修复,花了整整一天。
所以,awvs是个好帮手,但别指望它替你思考。用它扫一遍,拿到报告,然后静下心,逐条分析,手动复现,再结合业务逻辑做判断——这才是正经用法。工具是死的,人是活的,漏洞探测这事儿,说到底还是人和人之间的博弈。