Nuclei实战指南:从零构建高效漏洞扫描工作流

张开发
2026/4/11 2:06:53 15 分钟阅读

分享文章

Nuclei实战指南:从零构建高效漏洞扫描工作流
1. 为什么选择Nuclei作为漏洞扫描工具第一次接触Nuclei是在去年的一次红队演练中当时我们需要在短时间内对上百个目标进行漏洞扫描。传统的扫描工具要么速度太慢要么误报率太高直到团队里的老张推荐了Nuclei。用他的话说这玩意儿就像个瑞士军刀简单但啥都能干。Nuclei最大的特点就是它的模板机制。你可以把它理解成一个智能化的漏洞检测框架社区里已经有2000多个现成的检测模板覆盖了从常见的CVE漏洞到各种Web应用漏洞。我特别喜欢它的零误报设计这意味着你看到的每一个报警都值得认真对待不会像某些商业扫描器那样给你一堆需要人工筛选的垃圾数据。性能方面Nuclei的表现也相当亮眼。基于Go语言开发的它天生就适合高并发场景默认150请求/秒的速率对于大多数扫描任务都绰绰有余。记得有一次我用它扫描一个包含500个子域名的资产清单不到20分钟就完成了全量扫描这在以前简直不敢想象。2. 从零开始搭建Nuclei环境2.1 安装Nuclei本体安装Nuclei简单得令人发指。如果你是Windows用户直接去GitHub Releases页面下载对应版本的zip包解压后把nuclei.exe所在目录添加到PATH环境变量就完事了。Linux用户更简单Kali直接apt install nuclei其他发行版也可以用官方提供的Docker镜像。我个人比较推荐Docker方式特别是当你需要在不同环境间切换时。下面这个命令就能拉取最新镜像docker pull projectdiscovery/nuclei:latest2.2 配置模板库安装完本体后第一件事就是获取漏洞模板库。Nuclei的模板分为官方维护和社区贡献两部分建议都下载下来nuclei -ut这个命令会自动下载最新模板到~/nuclei-templates目录。如果你像我一样有强迫症可以通过修改.templates-config.json文件来指定其他存储位置。有个小技巧是定期更新模板库。我习惯在crontab里加个定时任务每周自动更新0 3 * * 1 /usr/local/bin/nuclei -ut /dev/null 213. 构建你的第一个扫描任务3.1 基础扫描命令让我们从一个最简单的例子开始。假设我们要扫描一个WordPress网站是否存在已知漏洞nuclei -u http://example.com -t technologies/wordpress/ -o wp_scan.txt这个命令会针对example.com使用wordpress目录下的所有模板把结果保存到wp_scan.txt第一次运行可能会有点慢因为Nuclei需要加载和编译模板。后续扫描就会快很多这是因为它会缓存编译后的模板。3.2 参数调优实战默认配置可能不适合所有场景。比如扫描内网系统时我通常会调整这些参数nuclei -l intranet_targets.txt -t cves/ -c 20 -timeout 10 -retries 3 -o results.json-c 20将并发数降到20避免把老旧设备打挂-timeout 10给内网设备更长的响应时间-retries 3自动重试失败的请求如果是扫描云上资产则可以更激进些nuclei -l cloud_targets.txt -c 100 -rl 300 -timeout 5 -o cloud_scan.json4. 高级技巧与实战场景4.1 与其他工具联动Nuclei最强大的地方在于它能完美融入现有的工具链。比如这个经典的资产发现漏洞扫描流水线subfinder -d example.com | httpx -silent | nuclei -t exposures/ -o report.md我经常用这个组合在红队演练初期快速摸清攻击面。subfinder负责发现子域名httpx过滤出存活网站最后nuclei进行漏洞检测。4.2 自定义模板开发虽然社区模板已经很丰富但遇到特殊场景时还是需要自己写模板。比如上次遇到一个内部系统我写了这样的检测逻辑id: internal-system-check info: name: Internal System Vulnerability Check severity: high author: yourname http: - method: GET path: {{BaseURL}}/api/v1/system/status matchers: - type: regex regex: [\version\:\1\\.0\\.([0-9])\] part: body condition: and group: 1 dsl: - contains(version, 1.0.1)这个模板会检查系统版本是否为易受攻击的1.0.1版。写完后保存为.yaml文件用-t参数指定即可使用。5. 结果分析与报告输出5.1 实时监控扫描进度长时间扫描时加上-stats参数可以实时查看进度nuclei -l targets.txt -t cves/ -stats输出类似这样[INF] Templates loaded: 1428 [INF] Targets loaded: 53 [INF] Running with 25 concurrency [INF] Requests made: 3245 (53.2/sec) [INF] Matched: 35.2 生成专业报告Nuclei支持多种报告格式。我最常用的是Markdown格式方便直接粘贴到工作平台nuclei -l targets.txt -t cves/ -o report.md -me生成的报告会包含漏洞详情、严重等级和修复建议可以直接发给开发团队。对于管理层HTML格式可能更友好nuclei -l targets.txt -t cves/ -o report.html6. 避坑指南与性能优化在实际使用中我踩过不少坑。比如有一次扫描把客户的测试环境打挂了后来才知道是并发设得太高。现在我的经验法则是对生产环境-c 25 -rl 100对测试环境-c 10 -rl 50对老旧系统-c 5 -rl 20另一个常见问题是WAF拦截。这时候可以尝试nuclei -u http://target.com -t cves/ -H User-Agent: Mozilla/5.0 -retries 3 -rate-limit 30通过伪装UA和降低请求频率来绕过防护。最后提醒一点扫描前务必获得授权。我就见过有人用自动化工具扫着扫着把自己公司IP封了的尴尬情况。

更多文章