从信息搜集到攻击面分析:漏洞赏金实战中的自动化侦察与弱点关联 1. 项目概述从信息搜集到攻击面分析的实战闭环在漏洞赏金的世界里信息搜集从来都不是一个孤立的步骤它更像是一场战役前的全面侦察。很多新手猎人拿到一个目标比如一个主域名往往一头雾水不知道从哪里下手。他们可能会用几个常见的工具扫一遍发现没有明显的漏洞就草草放弃认为目标“太硬”或者“已经被挖干净了”。这其实是一个巨大的误区。真正的差距往往不在于你发现了什么而在于你“看到”了什么。信息搜集的深度和广度直接决定了你能看到的攻击面有多大。一个资深猎人和一个新手之间对同一个目标的认知可能天差地别——新手看到的是一栋大楼而资深猎人看到的是这栋大楼的每一扇窗户、每一道通风管道、每一个废弃的后门以及大楼旁边那间不起眼的管理员小屋。我这次分享的案例就是想用一个具体的、简单的目标来演示如何将看似零散的信息点通过逻辑串联和分析构建成一个清晰的、可攻击的“面”。我们不会使用什么高深莫测的0day也不会涉及复杂的绕过技巧核心就是“直指根本”找到那些因为配置疏忽、资产暴露、逻辑缺陷而留下的“软柿子”。这个过程我称之为“攻击面分析”它是信息搜集的最终目的也是发起有效攻击的起点。无论你是刚入行的新手还是想优化自己工作流的同行希望这个从侦察到锁定目标的完整链条能给你带来一些实实在在的启发。2. 核心思路从“资产发现”到“弱点关联”的思维模型很多工具教程会教你用A工具找子域名用B工具扫端口用C工具识别技术栈。这没错但如果你只停留在“收集列表”的层面那这些信息就是一堆冰冷的、无意义的数据。我的核心思路是建立一个“资产发现 - 属性枚举 - 弱点关联 - 攻击路径构建”的思维模型。2.1 思维模型的四个阶段第一阶段是资产发现。目标绝不止一个主域名。我们要利用各种公开源证书透明度日志、DNS记录、搜索引擎、代码仓库等和工具尽可能全面地找出与目标相关的所有资产。这包括但不限于子域名、IP地址、关联公司或品牌名、移动应用、API端点、云存储桶如S3、Blob、源代码仓库、员工在社交媒体上提到的内部系统代号等。这里的关键是“关联性”任何与目标公司、品牌、产品线、员工相关的数字痕迹都可能是一个入口点。第二阶段是属性枚举。对于发现的每一个资产比如一个子域名我们需要给它贴上标签丰富它的“画像”。这个资产运行的是什么服务是Nginx 1.18还是Apache 2.4后端是什么技术是PHP 7.4 Python Django 还是 Node.js它是否使用了特定的框架或CMS比如WordPress、Joomla、或者ThinkPHP它开放了哪些端口除了80/443有没有暴露22SSH、21FTP、3306MySQL、6379Redis、9200Elasticsearch等管理或数据服务端口它有没有配置错误的安全头如缺少CSP、HSTS是否使用了含有已知漏洞的第三方组件JavaScript库、jQuery版本、框架版本这个阶段的目标是把一个简单的域名变成一个充满技术细节的“档案”。第三阶段是弱点关联。这是从“信息”到“漏洞”的关键一跃。我们需要将枚举出的属性与已知的弱点模式进行关联。这不是简单的漏洞扫描器报一个CVE编号而是基于经验的逻辑推理。例如属性发现一个dev.api.target.com的子域名。关联弱点开发或测试环境。常见弱点包括默认凭证、调试模式开启、暴露的API文档如Swagger UI、未授权访问、配置信息泄露如.env、config.php文件。属性发现一个legacy.target.com的子域名技术栈识别为旧版IIS ASP.NET。关联弱点遗留系统。常见弱点包括未打补丁的已知漏洞如特定版本的IIS解析漏洞、已弃用且不安全的协议如SSLv3、弱加密算法、管理员疏于维护。属性在GitHub上找到目标公司员工上传的代码片段其中包含一个硬编码的AWS密钥片段。关联弱点凭证泄露。可能直接导致云资源如S3存储桶被未授权访问甚至服务器被接管。第四阶段是攻击路径构建。单个弱点可能无法直接getshell或拿到核心数据但多个弱点组合起来就可能形成一条完整的攻击链。比如通过信息泄露拿到一个内部员工邮箱利用该邮箱进行密码重置攻击或钓鱼获得初级权限再结合内部系统的一个未授权访问漏洞横向移动到更重要的服务器。我们的分析就是要尝试描绘出这些潜在的路径。2.2 为什么选择“简单案例”你可能会问为什么是“简单案例”因为复杂的案例往往涉及特定的业务逻辑、复杂的交互流程和精巧的绕过这些虽然技术含量高但可复现性和普适性不强。而“简单案例”揭示的是那些最普遍、最根本的安全问题错误的配置、暴露的资产、疏忽的管理。这些问题在互联网上大量存在是漏洞赏金中稳定产出的“基本盘”。掌握发现和分析这类问题的能力是每个猎人的基本功也是收入的重要保障。这个案例就是要打磨这项基本功。3. 实战工具链与自动化策略工欲善其事必先利其器。完全手动操作效率太低我们需要一套半自动化的工具链来支撑上述思维模型。我的策略是以一两款核心工具为骨架配合大量专项工具和自定义脚本形成流水线。记住没有“银弹”工具最佳实践是组合拳。3.1 核心侦察工具Subfinder Amass Assetfinder对于资产发现子域名我主要依赖这三者的组合因为它们的数据源各有侧重。Subfinder 纯被动收集的佼佼者。它通过查询数十个公开的API和数据源如SecurityTrails, Censys, PassiveTotal等来发现子域名速度快噪音相对较低非常适合初步侦察。我通常用它来做第一轮广撒网。subfinder -d target.com -silent -o subfinder.txtAmass 被动与主动结合的王者。它的被动收集模块非常强大同时还能进行DNS暴力破解、爬取证书透明度日志CT Logs、甚至递归搜索。Amass的数据库模式能持续跟踪资产变化。我常用它进行深度枚举。amass enum -passive -d target.com -o amass_passive.txt amass enum -active -d target.com -brute -w ~/wordlists/subdomains-top1million-5000.txt -o amass_active.txtAssetfinder 一个简单高效的Go工具主要从AlienVault OTX, Wayback Machine, URLScan等源获取数据。它经常能发现一些其他工具遗漏的角落。assetfinder --subs-only target.com assetfinder.txt注意将这些结果合并、去重是必须的步骤。我习惯用sort -u命令并会仔细人工审查一些看起来奇怪的子域名如mail.target.com.webcache.com这类可能由某些源误报的结果。3.2 服务与端口探测Naabu Nmap发现子域名后需要知道它们对应哪些IP开放了哪些端口。Naabu 用Go写的快速端口扫描器速度比Nmap默认的SYN扫描更快特别适合处理大量主机。我常用它进行全端口快速扫描找出开放的端口。naabu -list subdomains.txt -p - -exclude-ports 80,443 -o naabu_open_ports.txtNmap 端口扫描的终极武器。在Naabu发现开放端口后用Nmap进行服务版本探测和脚本扫描获取更详细的信息。nmap -sV -sC -p 开放端口列表 -iL target_ips.txt -oA nmap_service_scan-sC会运行默认的NSE脚本经常能直接发现一些低悬果实比如暴露的robots.txt、http-title信息泄露等。3.3 Web资产分析与指纹识别Httpx Nuclei这是将“资产”转化为“带属性的目标”的关键步骤。Httpx 一个极快的HTTP探测工具。它可以对大量主机:端口进行HTTP/S请求获取状态码、响应大小、标题、技术栈指纹通过-tech-detect、证书信息等。我通常用它对所有发现的:80, :443, :8080等Web端口进行探测并过滤出活着的Web服务。httpx -list subdomains_and_ips.txt -title -status-code -tech-detect -cdn -o httpx_live_hosts.txt-tech-detect选项会尝试识别技术栈如PHP, WordPress, React-cdn会尝试检测目标是否在CDN后面。Nuclei 不仅仅是漏洞扫描器更是基于模板的检测引擎。社区有数千个模板覆盖从信息泄露、配置错误到各种CVE漏洞。我把它作为自动化弱点关联的主力。在获得活着的Web资产列表后先用信息搜集类模板扫一遍。nuclei -l httpx_live_hosts.txt -t ~/nuclei-templates/exposures/ -o nuclei_exposures.txt nuclei -l httpx_live_hosts.txt -t ~/nuclei-templates/misconfiguration/ -o nuclei_misconfig.txt3.4 自动化流水线示例我将以上工具串联成一个简单的Shell脚本实现从域名输入到初步报告输出的半自动化流程#!/bin/bash TARGET$1 echo [*] 目标: $TARGET echo [*] 阶段1: 子域名枚举... subfinder -d $TARGET -silent -o subfinder_$TARGET.txt amass enum -passive -d $TARGET -o amass_passive_$TARGET.txt assetfinder --subs-only $TARGET assetfinder_$TARGET.txt wait cat subfinder_$TARGET.txt amass_passive_$TARGET.txt assetfinder_$TARGET.txt | sort -u all_subs_$TARGET.txt echo [] 发现子域名数: $(wc -l all_subs_$TARGET.txt) echo [*] 阶段2: HTTP探测与指纹识别... httpx -l all_subs_$TARGET.txt -title -status-code -tech-detect -cdn -o httpx_live_$TARGET.txt -silent echo [] 存活Web资产数: $(wc -l httpx_live_$TARGET.txt) echo [*] 阶段3: 初步漏洞与信息泄露扫描... nuclei -l httpx_live_$TARGET.txt -t ~/nuclei-templates/exposures/ -severity low,medium,high -o nuclei_initial_$TARGET.txt -silent echo [*] 完成报告已生成。 echo 存活资产列表: httpx_live_$TARGET.txt echo 初始扫描结果: nuclei_initial_$TARGET.txt这个脚本只是一个起点你可以根据需要添加端口扫描、目录爆破、截图等环节。关键在于自动化处理了繁琐的、重复性的收集工作让我们能把宝贵的时间和精力集中在分析上。4. 案例拆解一个“简单”目标的分析全过程假设我们的目标是examplecorp.com。这是一个虚构的公司但我们假设它是一家中小型互联网公司提供在线服务。下面我们一步步拆解。4.1 广度侦察发现隐藏的资产运行我们的自动化脚本后我们得到了一个存活Web资产列表。除了常见的www.examplecorp.com,mail.examplecorp.com,blog.examplecorp.com之外我们还发现了几个有趣的条目dev.examplecorp.com- 状态码200标题显示“ExampleCorp Dev Portal”。staging-api.examplecorp.com- 状态码200返回JSON数据提示“未提供API密钥”。legacy.examplecorp.com- 状态码200技术栈识别为Microsoft-IIS/8.5。vpn.examplecorp.com- 状态码200标题是“Secure Login”。s3-website-us-east-1.amazonaws.com上的一个奇怪域名通过证书透明度日志关联到assets.examplecorp.com但直接访问该S3 URL也能看到一些文件列表。4.2 深度枚举为资产贴上标签接下来我们对这些有趣的资产进行深度枚举。对于dev.examplecorp.com:nmap -sV -sC dev.examplecorp.com显示开放80和443端口。手动访问发现是一个内部开发门户有登录界面。查看页面源代码发现注释里提到了!-- TODO: Remove default creds admin/admin123 before prod --。这是一个硬编码凭证线索。gobuster dir -u https://dev.examplecorp.com -w ~/wordlists/common.txt发现/backup目录目录列表开启里面有一个2023-12_db_backup.sql.gz文件。这是敏感文件泄露。Nuclei扫描报告了http://dev.examplecorp.com/.git/目录可访问git-config模板命中。这是版本控制信息泄露。对于staging-api.examplecorp.com:httpx的-tech-detect显示它是Node.js/Express。访问根路径返回{error: API key required}。尝试访问/docs或/swagger发现https://staging-api.examplecorp.com/api-docs存在并且是Swagger UI详细列出了所有API端点、参数甚至包含了测试功能。这是暴露的API文档可能允许未授权的接口探测或测试。尝试对常见的API路径进行模糊测试如/api/v1/users,/api/admin等。对于legacy.examplecorp.com:Nmap脚本扫描 (-sC) 显示服务器是Microsoft-IIS/8.5并且http-server-header: Microsoft-IIS/8.5。查询IIS 8.5的已知漏洞发现其对应Windows Server 2012 R2存在一些老的漏洞但可能已修补。更关键的是使用gobuster扫描发现/phpmyadmin目录并且可以访问。这是一个未授权访问的管理界面。虽然可能需要密码但已经是重大风险。同时发现/server-status可访问泄露了服务器状态信息。对于vpn.examplecorp.com:访问后是一个定制化的登录页面。技术栈识别为某品牌VPN的Web门户。检查登录表单看是否存在用户名枚举漏洞通过不同的错误信息。尝试常见默认凭证。搜索该品牌VPN近期的CVE。这是边界设备一旦突破意义重大。对于暴露的S3存储桶:直接访问http://assets.examplecorp.com.s3-website-us-east-1.amazonaws.com可以看到文件列表。使用awscli或s3scanner工具尝试列出桶内内容如果配置了错误权限。aws s3 ls s3://assets.examplecorp.com/ --no-sign-request如果成功则证明是可公开列表的存储桶。进一步尝试下载文件看是否有写权限。4.3 弱点关联与攻击面绘制现在我们将枚举出的属性关联到具体的弱点并尝试构建攻击面开发环境暴露 (dev.examplecorp.com):弱点 开发/测试环境通常安全控制较弱。关联发现页面注释泄露默认凭证 (admin/admin123) -弱口令/默认口令。开启目录列表的/backup目录 -敏感信息泄露可能包含数据库凭证、业务数据。暴露的.git目录 -源代码泄露通过git-dumper工具可还原完整代码可能找到硬编码密钥、逻辑漏洞。攻击面 尝试使用默认凭证登录。如果成功可能直接进入后台。下载备份文件分析数据库转储寻找更多凭证或业务逻辑信息。利用.git泄露审计源代码。测试API文档暴露 (staging-api.examplecorp.com):弱点 测试环境API文档未做访问控制。关联发现 完整的Swagger UI -过度信息泄露API结构、参数、潜在的未授权功能测试。攻击面 仔细阅读API文档寻找不需要认证或认证逻辑有缺陷的端点。尝试调用这些端点进行参数模糊测试SQLi, XSS, 命令注入等。例如文档里可能有一个/api/v1/user/{id}的GET请求尝试遍历id看是否存在用户信息泄露。遗留系统与未授权访问 (legacy.examplecorp.com):弱点 旧系统疏于维护可能存在未修复漏洞或错误配置。关联发现phpMyAdmin未授权/弱口令访问 -数据库完全控制。server-status页面暴露 -服务器状态信息泄露。攻击面 对phpMyAdmin进行暴力破解或尝试默认口令 (root/空)。一旦进入可执行任意SQL语句获取数据甚至通过SELECT INTO OUTFILE写webshell。server-status可能泄露内部请求和IP辅助内网测绘。边界设备 (vpn.examplecorp.com):弱点 VPN是进入内网的关键通道其漏洞价值极高。关联发现 特定品牌VPN -已知漏洞攻击面。攻击面 搜索该VPN设备近1-2年的所有CVE和公开漏洞利用如CVE-2023-46805, CVE-2024-21887等。检查登录页面是否存在用户名枚举、OTP爆破等漏洞。这是高价值目标。云存储桶配置错误 (assets.examplecorp.comS3桶):弱点 云资源权限配置错误是常见问题。关联发现 S3桶可公开列表 -存储对象泄露风险。攻击面 列出所有对象检查是否有敏感文件如配置文件config.json,.env 客户数据备份源代码压缩包。尝试上传文件测试是否具有写权限可能导致存储型XSS或恶意文件分发。通过以上分析我们不再是面对一个孤立的examplecorp.com而是看到了一个由多个脆弱节点组成的攻击面图谱。每个节点都有明确的弱点属性和潜在的利用路径。接下来就是选择成功率最高、影响最大的节点进行深入的漏洞验证和利用尝试。5. 从信息到漏洞关键验证技巧与深度挖掘发现了潜在的弱点如何将其转化为可报告甚至可利用的漏洞这需要一些验证技巧和深度挖掘的耐心。5.1 凭证相关漏洞的验证默认/弱口令 发现像admin/admin123这样的线索不要只在一个地方试。很多系统共用一套凭证。尝试在dev门户、legacy系统的phpMyAdmin、甚至VPN登录页使用这套凭证。使用工具如hydra或medusa进行定向爆破时要合理设置线程和延迟避免触发账户锁定。密码重置与用户枚举 对于登录页面测试“忘记密码”功能。输入一个已知存在的邮箱可能从Git提交记录或数据库备份中获得和一个随机邮箱观察响应差异响应时间、错误信息。如果存在差异就可能存在用户枚举漏洞。进一步测试能否将重置链接发送到攻击者控制的邮箱。5.2 信息泄露的深度利用.git泄露 使用git-dumper工具完整下载.git文件夹。然后使用git log查看提交历史git diff查看代码变更。重点寻找被注释掉但包含敏感信息的代码行。硬编码的API密钥、数据库密码、加密密钥。配置文件如config.php.dist,.env.example中暴露的格式可能和线上配置文件类似。测试用的账号密码。git-dumper https://dev.examplecorp.com/.git/ ./git_output cd ./git_output git log --oneline git show commit_hash # 查看某次提交的详情备份文件与目录列表 下载发现的备份文件如.sql.gz,.zip,.tar。解压后仔细分析。数据库转储文件是宝藏搜索password,hash,secret,key,token等关键词。配置文件里找连接字符串。有时还能发现管理员会话、订单信息等业务数据。5.3 API端点的测试方法参数测试 对于Swagger UI中发现的API使用Burp Suite的Intruder或自定义脚本对每个参数进行测试。SQL注入 在数字型参数后加字符型参数尝试 OR 11观察响应差异或错误信息。命令注入 在可能调用系统命令的参数如file,cmd,host中尝试; whoami,| id,$(id)。路径遍历 对于文件路径参数尝试../../../../etc/passwd。SSRF 对于接收URL的参数尝试http://169.254.169.254/latest/meta-data/AWS元数据服务或http://localhost:8080/admin。未授权访问 直接调用API端点不添加任何认证头如Authorization: Bearer ...看是否返回数据。有时API会对GET请求宽松但对POST/PUT/DELETE严格需要逐一测试。5.4 云存储桶的权限验证列出对象aws s3 ls s3://bucket-name/ --no-sign-request或使用浏览器直接访问S3端点。下载对象aws s3 cp s3://bucket-name/path/to/file ./local-file --no-sign-request上传对象aws s3 cp ./test.txt s3://bucket-name/test.txt --no-sign-request。如果成功证明有写权限这是一个存储桶上传漏洞。可以尝试上传HTML文件触发XSS或上传恶意脚本。检查桶策略 如果aws s3api get-bucket-policy --bucket bucket-name可以执行可能需要认证可以分析策略配置错误。6. 报告撰写与后续行动指南发现漏洞只是成功了一半清晰、专业地报告漏洞才能确保它被认可并得到修复这也是猎人的核心价值体现。6.1 漏洞报告的核心要素一份好的漏洞报告应该让安全团队一目了然快速复现。它必须包含标题 简明扼要如 “dev.examplecorp.com存在.git目录泄露导致源代码泄露”。漏洞类型 如信息泄露、未授权访问、弱口令等。风险等级 根据CVSS标准或项目自定义标准评估如Critical, High, Medium, Low。评估时考虑可利用性和影响程度。目标 精确的URL或资产标识如https://dev.examplecorp.com/.git/。详细描述发现过程 简述如何发现的如通过自动化扫描或手动测试。漏洞细节 详细说明漏洞点。对于.git泄露说明访问该目录可以看到什么以及如何利用git-dumper还原代码。根本原因 分析原因如“生产环境错误地部署了包含.git目录的源代码”。复现步骤 一步一步的指南让安全团队能完全复现。第一步访问https://dev.examplecorp.com/.git/。第二步使用git-dumper工具下载仓库。第三步使用git log查看提交历史发现硬编码的数据库凭证在config.php文件的某次提交中。影响证明 这是关键。不要只说“可能导致源代码泄露”。要展示实际泄露了什么。例如附上截图显示.git目录列表附上git log的输出片段并高亮显示泄露的敏感信息如数据库密码db_passwordSup3rS3cr3t!。如果可能证明这些凭证是有效的但绝对不要在未经授权的情况下连接生产数据库可以连接一个自己搭建的测试环境来演示风险。修复建议 提供具体、可操作的修复方案。例如在Web服务器配置中禁止访问.git目录如Nginx的location ~ /\.git { deny all; }。在构建和部署流程中确保.git目录被排除在发布包之外如.gitignore或构建脚本中删除。对已泄露的凭证立即进行轮换。附加信息 如HTTP请求/响应原始数据可放在附件、测试时使用的工具版本等。6.2 后续行动从单点到纵深提交报告后工作并未结束。监控与跟进 关注报告状态。如果一段时间未回复可以礼貌地询问进展。如果被标记为“重复”或“不予受理”仔细阅读原因这是宝贵的学习机会。关联挖掘 在一个目标上发现的模式可以应用到其他类似目标。例如如果你发现这家公司习惯把.git目录部署上线那么检查它的其他子域名、甚至收购的其他品牌网站。攻击链构建 尝试将多个低危/中危漏洞串联。例如利用.git泄露获得的内部邮箱在VPN登录页进行密码重置攻击。或者利用测试API的未授权端点结合某个参数注入最终实现远程代码执行。这种“组合拳”往往能将漏洞等级提升到“高危”甚至“严重”。知识沉淀 将这次侦察过程中有效的子域名词表、特殊的指纹规则、成功的测试用例更新到你的个人知识库和工具配置中。例如将dev,staging-api,legacy这类关键词加入你的子域名爆破字典。漏洞赏金是一场信息不对称的游戏。你的优势在于你比目标的防御者花了更多时间去观察、分析和连接那些被忽视的点。信息搜集与分析攻击面就是构建这种优势的基础。它没有太多炫技的成分更多的是耐心、细致和系统性的思考。从简单的配置错误入手不断练习这种“发现-枚举-关联-验证”的肌肉记忆你会发现自己能看到的东西越来越多那些曾经看似坚固的目标也会逐渐显现出它的裂缝。这条路没有捷径但每一步都算数。