scan4all 实战场景指南:外网资产、内网 B 段与 WAF 拦截下的漏洞扫描策略
【免费下载链接】scan4allOfficial repository vuls Scan: 15000+PoCs; 23 kinds of application password crack; 7000+Web fingerprints; 146 protocols and 90000+ rules Port scanning; Fuzz, HW, awesome BugBounty( ͡° ͜ʖ ͡°)...项目地址: https://gitcode.com/GitHub_Trending/sca/scan4all
本文围绕 scan4all 官方场景文档(static/scenario.md)展开,覆盖外网资产扫描、内网 B 段探测优化、WAF 拦截下的降级检测三类典型实战场景,并结合 命令行参数定义 与 检测引擎实现 说明各参数背后的行为差异,帮助读者按目标环境选择正确的命令组合,避免在大规模扫描中浪费时间或被 WAF 清零。
一、三类场景的总体思路
scan4all 的定位是一条完整的自动化漏洞扫描流水线:端口扫描(naabu 内核)→ HTTP 服务识别与指纹(httpx 内核)→ POC 漏洞检测(Go 编写的 pocs_go 与 YAML 模板 pocs_yml)。程序入口在 main.go,由util.DoInit(&config)初始化内嵌的config目录(其中包含 pocs_yml 模板集 与 Go POC 集),随后调用 lib/api/main.go 中的api.StartScan(nil)启动整条流水线。
lib/api/main.go 中的调用链可以确认这一点:
naaburunner.ParseOptions()解析命令行参数(参数定义见 pkg/naabu/v2/pkg/runner/options.go);naabuRunner.RunEnumeration()执行端口枚举;naabuRunner.Httpxrun(nil, nil)在端口扫描完成后自动衔接 Web 扫描与 POC 检测。
理解了这条流水线,就能理解官方场景文档中三类场景的命令差异:它们本质上都是在回答同一个问题——当前环境下,应该跑流水线中的哪些阶段、以什么输入规模去跑。
二、外网场景:先做资产归一化,再快速扫描
外网场景的核心是输入资产的质量。官方文档给出的操作路径是:
- 自己收集目标的外网资产信息,包括资产的域名、C 段、相关 IP 等;
- 将资产汇总后去重,保存于本地文件;
- 使用该文件驱动 scan4all 快速扫描:
scan4all -l input.txt -ceyeapi xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -ceyedomain xxxxxx.ceye.io -csv -o output.csvinput.txt内可以是多种格式混排的资产:URL、域名、C 段、IP。这里有一条关键的行为边界——URL 地址不会进行端口扫描,只有裸 IP/域名/C 段才会触发 naabu 端口枚举。这与参数设计中-l对应的HostsFile字段("list of hosts to scan ports (file)")一致,而 URL 输入在进入流水线后只会走 Web 阶段的指纹与 POC 检测。
参数逐项说明
结合 options.go 中的注册逻辑,上述命令涉及的参数含义如下:
| 参数 | 源码注册位置 | 作用 |
|---|---|---|
-l, -list | HostsFile,"list of hosts to scan ports (file)" | 指定待扫描资产列表文件,支持 URL/域名/C 段/IP 混排 |
-ceyeapi | CeyeApi,"ceye.io api key" | ceye.io 的 OOB(带外)交互 API Key |
-ceyedomain | CeyeDomain,"ceye.io subdomain" | ceye.io 的交互子域名 |
-csv | CSV,"write output in csv format" | 结果以 CSV 格式输出 |
-o, -output | Output,"file to write output to (optional)" | 结果写入的文件路径 |
其中-ceyeapi与-ceyedomain是 scan4all 区别于一般扫描器的关键配置。源码中可以看到其实际用途:lib/util/util.go 中通过http://api.ceye.io/v1/records?token=%s&type=dns&filter=%s主动查询 DNS 交互记录。也就是说,对于 log4j、fastjson、Shiro 等基于OOB 回连的漏洞,工具在 POC 发送后会回查 ceye 的 DNS 记录来确认是否真正命中,从而降低无回显漏洞的误报率。如果 POC 集合中不需要回连验证,可以不提供这两个参数;但要获得完整、可信的检测结果,建议配置。
三、内网场景:用存活探测为 B 段扫描提速
官方文档指出了一个现实问题:直接使用 scan4all 对 B 段(/24)进行扫描速度非常慢,原因是需要对该段 254 个地址做大量端口扫描。推荐做法分两步:
- 先用 fscan 一类的工具对内网进行 B 段IP 存活探测(注意:fscan 是 scan4all 依赖/推荐搭配的外部工具,官方场景文档中给出了链接,安装方式以 fscan 项目自身说明为准);
- 将存活 IP 列表导入 scan4all 进行完整扫描:
scan4all -l ips.txt -ceyeapi xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -ceyedomain xxxxxx.ceye.io -csv -o output.csv这与外网场景命令形式相同,区别仅在于输入文件ips.txt是已经过存活过滤的 IP 列表,把"存活判断"这一最耗时的粗筛工作交给更轻量、更专注探测的工具完成,scan4all 则专注于后续的端口、指纹、POC 精扫。
可进一步调优的参数
内网扫描时,还可以结合 usage.md 中列出的完整参数表对规模进行控制:
-host, -list, -exclude-hosts, -exclude-file:输入与排除;-port, -top-Ports, -exclude-Ports, -Ports-file, -exclude-cdn:端口范围控制,内网目标若已知只开放常用端口,可用-top-Ports限定 top 端口以进一步提速;-c(worker 线程数,默认 25)、-rate(每秒发包数):并发与速率控制;-scan-all-ips, -sa:解析域名关联的所有 IP 并扫描。
四、WAF 场景:先保指纹,再补 POC
这是场景文档中最有实战价值的一条建议:如遇到 WAF 封禁 IP 的情况,建议先对资产进行指纹识别,再对 URL 地址进行 POC 检测——这样至少能得到资产的指纹列表,不至于完全没有结果。对应两条命令:
第一步,跳过 POC 检测,只做指纹识别:
scan4all -l input.txt -np -csv -o output.csv第二步,把 URL 资产单独列出,再补 POC 检测:
scan4all -l urls.txt -ceyeapi xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -ceyedomain xxxxxx.ceye.io -csv -o poc_output.csv-np参数在源码中的行为
-np在 options.go 中注册为NoPOC,帮助文本为 "Skip pocs_go check"。解析完成后会通过os.Setenv("NoPOC", ...)写入环境变量,供全链路读取:
- pkg/httpx/runner/runner.go 中 Web 扫描阶段以
if !scanopts.NoPOC作为 POC 检测的开关; - engine/engineImp.go 的事件循环中,
PocCheck_pipe收到指纹结果后,若util.GetValAsBool("NoPOC")为真则直接跳过pocs_go.POCcheck(...)调用。
因此第一步命令的实际效果是:完整跑端口扫描与 Web 指纹识别(指纹数据会进入引擎事件队列并被记录),但在 POC 下发环节整体短路。这一步对 WAF 的价值在于:指纹识别的请求特征与频次远小于全量 POC 轰击,更容易在封禁发生前拿到有价值的资产信息。
第二步中,urls.txt应只包含第一步指纹结果中确认的 URL(而非原始资产全量)。由于输入是 URL,按前述规则不会触发端口扫描,请求只集中在 Web 层 POC 检测,把攻击面与流量规模都压到最小。若 POC 仍被 WAF 拦截,还可以参考 config/WAFBypasHd.txt 中的 WAF 绕过请求头,配合-h输出中的调试参数(-debug、-v)观察实际请求行为。
五、三个场景的共性要点与注意事项
- 输入文件先行去重:三类场景都依赖
-l列表文件。列表重复会直接放大请求量并触发 WAF,外网资产收集阶段就应去重。 - 输出统一使用
-csv -o:CSV 输出便于在指纹与 POC 两步之间做数据衔接(例如从output.csv中筛出 URL 生成urls.txt),也便于事后复盘。 - ceye 参数的适用范围:
-ceyeapi/-ceyedomain影响的是 OOB 回连验证类 POC 的准确性,属于"锦上添花但强烈建议"的配置;不配置不会导致程序报错,只是回连类漏洞只能依赖响应特征判断。 - SYN 与 CONNECT 扫描类型的权限差异:options.go 中
showNetworkCapabilities逻辑显示,-s(SYN)扫描需要 root(Linux 下为CAP_NET_RAW)权限,非特权环境下自动降级为 CONNECT 扫描。内网大规模扫描时这一点直接影响速度与隐蔽性。 - 结果文件中的断点续扫:参数表中提供
-resume(基于 resume.cfg 恢复扫描),长时间的内网全段扫描中断后可复用该能力,避免重复起扫。
六、小结
scan4all 的三类场景可以浓缩为一套决策口诀:
- 外网:资产收集 → 去重入文件 →
scan4all -l input.txt -ceyeapi ... -ceyedomain ... -csv -o output.csv,URL 不走端口扫描; - 内网:fscan 存活探测 → 存活 IP 入文件 → 同一条命令精扫,必要时用
-top-Ports、-c、-rate控制规模; - WAF:
-np先取指纹保底 → 指纹 URL 单独列表 → 再补 POC 检测,把流量与攻击面拆开。
更多参数细节可参考仓库内 static/usage.md 的完整参数表与 static/running.md 的运行说明,POC 模板与 Go POC 的组成可分别在 pocs_yml 与 pocs_go 目录下查看。
【免费下载链接】scan4allOfficial repository vuls Scan: 15000+PoCs; 23 kinds of application password crack; 7000+Web fingerprints; 146 protocols and 90000+ rules Port scanning; Fuzz, HW, awesome BugBounty( ͡° ͜ʖ ͡°)...项目地址: https://gitcode.com/GitHub_Trending/sca/scan4all
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考