|
去年冬天,洞扫我帮一个做电商的描工朋友看服务器日志。凌晨三点,洞扫有人用sqlmap在十分钟内跑了四千多次请求,描工把商品详情页的洞扫id参数挨个试了一遍。朋友说那台机器上跑的描工是三年前的外包代码,连预处理语句都没用。洞扫这事让我重新翻出搁置很久的描工扫描器,也让我意识到——工具再老,洞扫只要有人还在写拼接SQL,描工它就永远有饭吃。洞扫 Web漏洞扫描工具本质上就是描工个自动化的“找茬机器”。你给它一个URL,洞扫它就像个不知疲倦的描工测试员,往表单里塞引号、洞扫往参数里插脚本、往请求头里改路径。做得好的扫描器会先爬一遍站点,把每个输入点都记下来,然后挨个注入payload。Acunetix和Burp Suite的主动扫描模块是这行的老炮儿,前者界面友好适合新手,后者得配合代理用,但能手动调参,灵活得多。 开源阵营里,OWASP ZAP算是活得最滋润的。我习惯拿它做初步筛查,尤其是它的Ajax Spider,对付那些靠JavaScript动态渲染的页面比传统爬虫管用。不过ZAP的误报率不低,有次它报了个XSS,我追了半天发现是前端框架自动转义了尖括号,白忙活一场。Nikto更偏服务器配置层面,能揪出过时的Apache版本或者危险的HTTP方法,但它不测业务逻辑漏洞——比如你改个订单ID就能看别人收货地址这种事,它根本不知道。 商业扫描器在覆盖面上确实更狠。Netsparker(现在叫Invicti)号称能证明漏洞真实存在,它会给每个疑似XSS弹个带唯一标识的alert框,截图存证。这招挺聪明,省得开发跟安全团队扯皮“到底能不能利用”。但价格也漂亮,小团队基本别想。 扫描器最大的坑是“扫完就完”。我见过太多人导出个PDF报告,标红几十个中危漏洞,然后扔给开发就不管了。实际上扫描结果得人工过一遍——有些注入点需要特定角色权限才能触发,有些反射型XSS只在某个冷门浏览器里生效。更麻烦的是逻辑漏洞,比如优惠券无限领、密码重置令牌可预测,这些扫描器基本抓瞎。你得自己写脚本模拟多步骤操作,或者干脆手工测。 另一个观察:扫描器对现代前端框架越来越力不从心。React、Vue把DOM操作全接管了,传统爬虫抓不到动态生成的链接和表单。ZAP有个社区插件叫“DOM XSS Scanner”,能监听浏览器事件,但配置起来麻烦。我现在的做法是先用Playwright写个简单爬虫把页面状态都点一遍,导出URL列表再喂给扫描器,效率反而高些。 说到底,扫描器就是个筛子。它帮你把沙子里的石子挑出来,但石子是不是真硌脚、硌的是谁的脚,还得自己踩一脚试试。别指望它替代人脑,也别因为它漏报就弃用。我电脑里常年开着Burp的被动扫描,流量过一遍,有异常再手动深挖。工具是死的,思路得活着。 |