渗透自动化

```html 渗透自动化

上个月帮一个朋友看他的小电商站,聊到凌晨两点。自动他问我:“你们搞安全的渗透,是自动不是每天都在手动挖洞?”我愣了一下,打开终端给他看了个脚本——那是渗透我三年前写的一个半自动侦察工具,喂进去一个域名,自动它自己跑子域爆破、渗透端口扫描、自动目录枚举,渗透最后吐出一份带优先级的自动报告。朋友看完说:“这他妈不就是渗透流水线吗?”

对,就是自动流水线。而且这条流水线,渗透早就不只是自动侦察阶段的事了。

几年前我还在手动跑 dirsearch,渗透一个站一个站地等结果,中间还得盯着有没有漏报。现在?我写了个调度器,把 subfinder、httpx、nuclei 串起来,中间加个去重和指纹识别,跑完自动推到 notion 里。整个过程我只需要做两件事:输入根域名,以及最后看一眼哪些漏洞值得深挖。

但这里有个坑。自动化跑得越顺,人就越容易懒。我见过有人把 nuclei 的模板全打开,扫完导出几千条结果,然后对着屏幕发呆——因为根本分不清哪些是真漏洞,哪些是误报。自动化没帮你做决策,它只是把决策的密度提高了。

工具替你跑腿,但替不了你思考。渗透测试里最值钱的从来不是“发现了什么”,而是“知道什么值得继续挖”。

拿 SQL 注入举例。以前手工测一个注入点,得构造 payload、看回显、判断类型、尝试绕过 WAF。现在 sqlmap 一条命令全搞定,甚至能自动 --os-shell。可问题是,如果目标站有自定义的加密参数,或者用了某种奇怪的 ORM 框架,sqlmap 照样抓瞎。这时候你还是得回到手工,抓包、分析参数结构、自己写 payload。

自动化擅长的是“广度”,不擅长“深度”。它能帮你扫一万个站,找出其中一百个有已知漏洞的,但那一百个里面真正能撕开口子的,往往只有一两个。剩下的九十八个,要么是蜜罐,要么是版本号误报,要么漏洞根本不可利用。

我自己的做法是:把自动化当筛子,不当锤子。筛子负责把沙子滤掉,锤子负责砸开石头。筛子可以批量买,锤子得自己磨。

# 一个简单的自动化侦察链,伪代码示意 for domain in root_domains: subs = subfinder(domain) alive = httpx(subs, ports=[80,443,8080,8443]) tech = whatweb(alive) vulns = nuclei(alive, templates="cves,misconfig,exposure") report(vulns, priority="high")

这脚本我跑了两年,改过十几版。最开始的版本没有去重,同一个 IP 上的不同域名重复扫了八遍。后来加了 cdncheck,把 CDN 后面的真实 IP 剔掉,效率直接翻倍。再后来加了 notify,扫到高危漏洞直接推手机。现在我甚至不用坐在电脑前等结果,早上起来看通知就行。

但有个事我一直没自动化:漏洞验证。不是不能做,是不敢做。自动验证意味着自动发 payload,万一打崩了生产环境,这锅谁背?我见过有人写了个自动 sqlmap 批量跑,结果把一个客户的数据库跑挂了,赔了三个月工资。

所以我的底线是:侦察可以全自动,利用必须半自动。工具可以帮你确认“这里可能有个洞”,但“要不要打进去”,得你自己判断。这个判断里包含了对业务影响、法律风险、客户授权的综合考量,不是几行代码能替代的。


说到底,渗透自动化的本质不是“让机器代替人”,而是“让人做更少但更重要的决策”。你把重复劳动交给脚本,把省下来的时间用来研究目标的应用逻辑、业务流、权限模型——那些自动化工具看不懂的东西。

上周那个电商站,自动化扫出来三个中危漏洞,朋友说“就这?”我花了一下午手工测,发现它的优惠券兑换接口存在逻辑缺陷,可以无限刷折扣。这个漏洞 nuclei 扫不出来,因为它是业务逻辑问题,不是技术栈问题。

自动化能帮你找到门,但门后面的路,还得自己走。

```