如果你现在打开 w3af.org,大概率会看到页面加载转圈,然后超时。没错,那个曾经在Kali Linux里预装、被无数安全新手拿来练手的Web应用扫描器,官网已经很久没有正经维护了。我上周想查一个插件参数,反复刷新了五次,最后只能去翻GitHub的存档。
w3af 的全称是 Web Application Attack and Audit Framework,念作“w-three-a-f”。它用Python写的,核心思路是把扫描器拆成插件——审计插件、攻击插件、爬虫插件、输出插件,各管一摊。这种架构在2008年那会儿挺超前,你可以在配置文件里像搭积木一样选插件,比如只开 sqli 和 xss 两个审计模块,再挂一个 console 输出,跑起来干净利落。
我第一次用w3af是2016年,在一台Ubuntu 14.04的虚拟机上。装完 apt-get install w3af 之后,敲 w3af_console 进去,界面长得像路由器命令行。输入 plugins 列出所有可用模块,密密麻麻两百多个。当时觉得这东西比Burp Suite“黑客”多了——Burp要手动点,w3af可以写脚本批量跑。但没过多久就发现,它爬虫太激进,经常把目标站扫挂,或者陷进无限循环的URL里出不来。
?page=1 一直翻到 ?page=99999,直到把服务器拖垮。”——某位不愿透露姓名的运维老哥 官网的文档其实写得挺细,有完整的插件列表和配置文件示例。但问题在于,项目从2018年之后就基本停更了。最后一次代码提交是2020年,Python 2 的依赖没完全迁到 Python 3,导致在 Kali 2022 之后的版本里装都装不上。官方GitHub仓库的issue区,最新一条是2023年有人问“还活着吗”,没人回复。
不过话说回来,w3af 的某些设计思路到今天依然值得看。比如它的 attack 插件里有个 os_commanding,专门检测命令注入,会尝试十几种绕过 ; | && 过滤的 payload。还有 blind_sqli,用时间盲注和布尔盲注双路验证,误报率比某些商业扫描器还低。我去年在一个老站上跑过,它硬是找出了一个 id=1' AND SLEEP(5)-- 的注入点,而当时最新的某款扫描器只报了个“疑似”。
官网首页以前有个“Features”列表,写着支持 OWASP Top 10 全部漏洞类型。现在你去看,页面只剩一个标题和几行失效的链接。但如果你去 GitHub 仓库,README 里还留着安装命令:git clone https://github.com/andresriancho/w3af.git,然后 ./w3af_gui。Linux 下得先装 python2.7 和一堆 pip2 包,Windows 更麻烦,官方早就放弃支持了。
我个人的判断是:w3af 官网已经成了一个数字废墟,但它的代码和插件思路还在影响后来者。比如 wapiti 的模块化设计就有点它的影子,而 nuclei 的模板机制,本质上也是把 w3af 的插件概念换了个壳。如果你手头有台老服务器,或者想研究早期扫描器的架构,花一个下午把 w3af 跑起来,看看它怎么处理 XSS 的上下文分析,比读十篇现代扫描器的文档更有收获。
最后说个细节:w3af 的配置文件是 ~/.w3af/profiles/ 下的 .pw3af 文件,纯文本,你可以直接改。我至今保留着一个叫 fast_scan.pw3af 的配置,里面只开了 audit 下的 xss、sqli、lfi 和 crawl 下的 web_spider,把并发调到 5,超时设成 10 秒。跑一个小站,三分钟出结果。比现在那些动辄要注册、要联网、要上传目标的云扫描器,痛快多了。
官网打不开没关系,pip install w3af 也早就失效了。但如果你在 /usr/share/w3af 里翻到旧版本,或者从 GitHub 拉下源码,记得用 Python 2.7 跑。别问我是怎么知道的。