1. 项目概述红队视角下的信息收集起点在真实的攻防对抗演练或渗透测试项目中信息收集的质量直接决定了后续所有行动的效率和成功率。很多刚入行的朋友容易犯一个错误拿到一个目标域名或IP就迫不及待地开始上漏洞扫描器一通狂扫。结果往往是触发了告警或者面对海量的扫描结果无从下手效率极低。我干了十多年红队最深的体会就是信息收集不是“扫描”而是“侦察”。你得像特种部队执行任务前一样悄无声息地把目标周围的地形、建筑结构、人员活动规律摸得一清二楚。今天要聊的“基础资产信息收集”就是这场侦察行动的第一步也是最关键的一步。它指的是在不触发目标安全设备告警的前提下尽可能全面地发现和梳理与目标相关的所有互联网暴露面资产。这些资产不仅仅是官网域名还包括子域名、关联域名、IP地址段、开放的端口、运行的Web应用、证书信息、历史DNS记录等等。把这些基础信息摸透了你手里就有一张清晰的“作战地图”后续无论是漏洞探测、权限提升还是横向移动都能做到有的放矢。这篇文章我会以一个虚构但典型的“example.com”作为目标带你完整走一遍我实战中常用的基础资产信息收集流程。我会重点分享工具背后的原理、操作顺序的逻辑以及那些在公开手册里很少提到的“踩坑”经验和判断技巧。无论你是刚接触红队的新手还是想优化自己工作流的老兵相信都能从中找到一些可以直接拿来用的东西。2. 信息收集的核心思路与原则在开始具体操作之前我们必须先统一思想。信息收集不是漫无目的地堆砌工具命令而是一个有明确目标、分阶段、讲策略的工程化过程。2.1 侦察而非攻击保持隐蔽性原则这是红队信息收集的铁律。所有操作都应以尽可能低的“噪音”进行。这意味着控制请求频率避免对单一目标发起高频、并发的请求。很多工具默认的线程数都很高在实战中需要手动调低。使用分散的数据源优先使用公开的、被动的情报源如证书透明度日志、DNS历史记录、搜索引擎快照这些操作不会直接与目标服务器交互。伪装请求头使用工具时注意其User-Agent等HTTP头是否带有明显的工具特征如httpx/1.2.3必要时进行修改或使用代理池。理解工具原理知道你所用的工具在背后做了什么。比如一个子域名枚举工具它是通过暴力字典猜测还是通过查询第三方API前者噪音大后者更安静。我的经验在针对防守严密的金融或大型互联网企业时我通常会设置一个较长的延迟--delay 2s并使用住宅代理IP。虽然速度慢但稳定性极高几乎从未因信息收集阶段的活动而暴露。2.2 资产测绘的广度与深度“基础资产”的范畴需要明确。我们的目标是绘制一张尽可能完整的“数字地产”地图。广度横向扩展以给定的根域名如example.com为起点发现所有相关的子域名mail.example.com,api.example.com,dev.example.com、兄弟域名如同公司旗下的example.net,example.org、以及通过投资关系、代码泄露、员工信息等发现的关联资产。深度纵向挖掘针对每一个发现的域名或IP我们需要知道存活状态它是否在线避免在“死”资产上浪费时间解析情况它指向哪个或哪些IP地址端口开放情况除了80/443是否开了8080、8443、7001等非常见端口Web应用特征如果开放了Web服务它的标题是什么用了什么技术栈如Nginx 1.18, PHP 7.4, WordPress 5.8是否有特殊的响应头关联信息它的SSL证书里还藏着哪些域名它的历史DNS解析记录有没有指向过内网IP或测试环境2.3 工作流设计从被动到主动从外部到内部一个高效的工作流应该是层层递进的被动信息收集利用第三方平台已有数据零交互。这是第一步最安全。主动信息收集在被动收集的基础上对发现的资产进行有限的、低强度的主动探测如HTTP请求、TCP端口连接。信息关联与整理将散乱的数据域名、IP、证书进行关联分析去重、合并形成结构化的资产清单。资产筛选与优先级排序不是所有资产都有同等价值。需要根据业务重要性、技术特征如使用了老旧框架、暴露面大小等因素筛选出高价值目标供后续深度测试。接下来我们就按照这个工作流一步步展开。3. 被动信息收集悄无声息地绘制轮廓被动收集是梦开始的地方。这里主要依赖各种公开的网络空间测绘引擎、搜索引擎、证书数据库和DNS历史记录。3.1 子域名发现撒下一张大网子域名是目标最常见的扩展资产。我通常会组合多种方法确保覆盖率。3.1.1 利用证书透明度CT日志这是目前最有效、最安静的发现手段。当目标网站申请HTTPS证书时证书颁发机构CA会将记录提交到公共的CT日志中。这些日志包含了证书中所有的域名Subject Alternative Name。工具subfinder,amass(passive mode), 或在线工具如crt.sh。实战命令与解析# 使用 subfinder 进行被动收集主要查CT日志 subfinder -d example.com -silent -o subfinder_passive.txt-silent只输出结果不显示banner和错误信息便于管道传递。原理subfinder会调用数十个被动数据源API包括crt.sh,CertSpotter,BufferOverrun等进行查询。注意事项CT日志有延迟新上线的子域名可能还没记录。同时它可能包含大量通配符证书*.example.com的记录这类记录对发现具体子域名帮助有限但证明了通配符证书的存在。3.1.2 搜索引擎语法Google Dorking利用搜索引擎强大的索引能力。常用语法site:example.com搜索该域名下的所有页面。site:*.example.com搜索所有子域名不一定完全准确。可以结合inurl:admin,intitle:login等关键词直接寻找管理后台。自动化工具theHarvester。它不仅能查Google还能查Bing、LinkedIn、Shodan等。theHarvester -d example.com -b google,bing -l 500 -f results.html-b指定数据源。-l限制结果数量。-f输出到HTML文件便于浏览。3.1.3 DNS聚合查询与暴力枚举聚合查询工具如amass enum -passive -d example.com它整合了比subfinder更广泛的被动源。字典暴力枚举这是主动方法但有技巧。关键在于字典质量。# 使用一个优质子域名字典 assetfinder --subs-only example.com | ./altdns -i - -o altdns_output.txt -w words.txt -r -s resolved.txtaltdns工具的作用是进行排列组合。例如发现dev.example.com和test.example.com后它会尝试dev-test.example.com、test-dev.example.com等常用于发现那些遵循特定命名规则的测试、预发布环境。3.2 关联资产挖掘顺藤摸瓜目标往往不是一个孤立的域名。我们需要找到它的“兄弟姐妹”和“邻居”。Whois信息与备案查询通过whois example.com查找注册邮箱、电话、注册商。同一邮箱注册的多个域名极有可能属于同一主体。对于国内目标ICP备案号是更强的关联依据。ASN自治系统号发现目标的IP地址属于某个ASN。这个ASN下可能托管了该公司的其他业务IP段。方法先通过dig short example.com或nslookup example.com获取一个IP然后用在线工具如bgp.he.net或whois查询该IP所属的ASN。最后可以尝试查询该ASN下的所有IP段有些网络空间测绘平台如Shodan,FOFA支持asn:ASxxxx语法查询。代码仓库与泄露信息在GitHub、GitLab上搜索公司名、项目名、邮箱后缀可能发现含有内部域名、API密钥、配置文件的代码片段。3.3 网络空间测绘引擎的妙用Shodan, Censys, FOFA, ZoomEye 这些引擎可以理解为互联网的“全局摄像头”。它们持续扫描全网并索引设备的banner信息。搜索语法Shodan:hostname:example.com,ssl:example.com,org:Company NameFOFA:domainexample.com,certexample.com,icon_hash-xxxx通过网站图标哈希找相同系统实战价值发现非Web服务直接发现开放了SSH22、RDP3389、数据库3306, 6379等端口的资产。识别技术栈直接获取服务器软件版本如nginx 1.16.1。证书搜索在Censys中搜索证书的SHA256指纹或直接搜域名能找到所有使用了该证书的IP这常常能发现CDN背后的真实IP或未在域名解析中出现的内部资产。4. 主动信息收集有限度的接触验证被动收集给了我们一份资产“候选名单”现在需要验证它们是否真实存在、是否在线并获取更多细节。这一步开始与目标有直接交互需格外小心。4.1 资产存活检测与解析拿到一堆子域名第一步是过滤掉“死”的。工具选择httpx,httprobe是常用工具。它们快速发送HTTP/HTTPS请求根据响应判断存活。实战命令与深度解析# 使用 httpx 进行智能存活检测 cat all_subs.txt | httpx -silent -title -status-code -tech-detect -ports 80,443,8080,8443,9000 -o alive_subs.txt-title获取页面标题有助于快速识别应用类型如“登录后台”、“API Dashboard”。-status-code记录HTTP状态码。403、401可能意味着有访问控制但路径存在500可能暴露错误信息。-tech-detect调用Wappalyzer等库识别技术栈前端框架、服务器、编程语言等这对后续漏洞利用选择至关重要。-ports指定探测的端口。这里我除了常见Web端口还加上了9000常见于一些管理面板。你可以根据目标行业调整比如金融可能常用7001WebLogic。原理httpx会并发地对每个域名:端口组合进行TCP连接并发送一个HEAD或GET请求。-tech-detect会分析响应头、Cookie名、HTML特征等匹配指纹规则库。4.2 端口扫描勾勒服务边界存活检测主要针对Web端口扫描则面向所有服务。策略选择全端口扫描耗时噪音大。仅在目标网络规模小或授权明确要求时使用。masscan是速度之王。masscan -p1-65535 IP --rate1000 -oL masscan.out常见端口扫描最常用。使用nmap自带的服务版本探测和脚本扫描。# 先快速扫描 top 1000 端口确认开放端口 nmap -sS -T4 --open -n IP -oN nmap_quick.txt # 针对开放端口进行服务版本和漏洞脚本探测 nmap -sV -sC -p 开放端口列表 IP -oN nmap_detail.txt-sSTCP SYN扫描半开连接相对隐蔽。-sV版本探测。-sC使用默认的NSE脚本进行更深入的探测可能触发告警慎用。我的心得不要一上来就对所有IP进行全端口扫描。我通常先对通过域名解析得到的IP进行常见端口扫描。如果发现某个IP是负载均衡或CDN节点则对其背后的IP段通过ASN或旁站信息推测进行更有针对性的扫描。永远把Web端口80,443,8080等的扫描和深度探测放在最优先的位置因为Web是当前最主要的攻击入口。4.3 Web应用信息指纹识别对于存活的Web服务我们需要像法医一样提取其“指纹”。手动查看永远不要完全依赖工具。浏览器访问查看源代码注释里可能有开发者信息、内部路径、API密钥虽然少见。JavaScript文件/static/js/app.js可能包含版本号、内部接口路径。robots.txt, sitemap.xml暴露目录结构。错误页面故意触发404或500错误可能泄露路径、框架信息。自动化工具whatweb老牌指纹识别工具速度快。whatweb https://target.example.com --colorneverWappalyzer浏览器插件直观方便适合手动排查时快速查看。httpx -tech-detect如前所述已集成此功能。关键信息Web服务器Nginx/Apache/IIS的版本。特定版本可能存在已知漏洞。开发框架ThinkPHP 5.0.24, Spring Boot 2.3.0等。框架漏洞往往危害巨大。前端框架/组件库Vue.js, React, jQuery版本。虽然通常不直接导致RCE但低版本可能包含XSS等前端漏洞的已知利用方式。中间件Tomcat, JBoss, WebLogic。这些是重点攻击目标。CMS系统WordPress, Joomla, Drupal及其插件/主题版本。有庞大的漏洞库对应。5. 信息整理与关联分析从数据到情报收集来的数据是原始、杂乱且重复的。这一步的目标是将其转化为结构化的、可操作的情报。5.1 数据去重与归一化域名去重同一个域名可能被多种方法多次发现。使用sort -u即可。IP去重与C段提取将解析到的所有IP地址去重并归类到C段/24网段。这有助于发现目标公司的IP地址范围。# 假设从 alive_subs.txt 中解析出IP并存到 ips.txt cat alive_subs.txt | awk {print $2} | sort -u unique_ips.txt # 提取C段 cat unique_ips.txt | sed s/\.[0-9]*$/.0\/24/ | sort -u c_blocks.txt端口服务整合将nmap扫描结果与httpx的Web探测结果合并形成“资产-IP-端口-服务-应用”的对应表。5.2 资产清单与可视化我习惯用Markdown或Excel来维护最终的资产清单。一个简单的表格可能包含以下列序号域名IP地址端口服务/协议Web标题技术栈备注如CDN、WAF1www.example.com1.2.3.480,443HTTP/HTTPSExample Inc. HomeNginx, ReactCloudflare CDN2api.example.com1.2.3.5443HTTPSExample API GatewayOpenResty, Java自建WAF3devops.example.com1.2.3.622,8080SSH, HTTPJenkinsJenkins 2.346高危资产对于大型项目可以使用Aquatone这样的工具进行可视化。Aquatone会对所有Web资产截图并生成一个HTML报告让你能快速浏览所有Web应用的界面直观发现登录口、管理后台等。cat alive_web_urls.txt | aquatone -out ./aquatone_report5.3 高价值目标筛选不是所有资产都值得投入同等精力。需要建立筛选标准业务重要性官网、核心API、支付系统、管理后台。技术脆弱性使用了已知存在漏洞的组件版本如Log4j2, Fastjson特定版本。暴露了敏感服务如Jenkins, GitLab, Docker Registry, Redis未授权。使用了老旧或不再维护的技术如Struts2, WebLogic旧版。暴露面大小面向公众登录的系统和内部员工使用的系统优先级不同。资产唯一性如果多个子域名指向同一个IP的同一个应用如多个域名泛解析到同一台服务器可以合并测试避免重复劳动。基于这些标准在资产清单中标记出“P0”最高优先级、“P1”、“P2”等级别指导后续的渗透测试工作。6. 实战流程串联与自动化脚本理论说再多不如一个完整的实战例子。下面我以example.com为目标串联起一个半自动化的流程。这个流程平衡了效率和隐蔽性。6.1 第一阶段被动收集与初步枚举#!/bin/bash TARGETexample.com OUTDIR./recon-$TARGET mkdir -p $OUTDIR echo [*] 开始被动子域名收集... subfinder -d $TARGET -silent -o $OUTDIR/subfinder.txt amass enum -passive -d $TARGET -o $OUTDIR/amass_passive.txt echo [*] 从证书透明度日志收集... # 使用 curl 查询 crt.sh curl -s https://crt.sh/?q%25.$TARGEToutputjson | jq -r .[].name_value | sed s/\*\.//g | sort -u $OUTDIR/crtsh.txt echo [*] 合并去重... cat $OUTDIR/subfinder.txt $OUTDIR/amass_passive.txt $OUTDIR/crtsh.txt | sort -u $OUTDIR/all_subs_passive.txt echo [] 被动收集完成共发现子域名: $(wc -l $OUTDIR/all_subs_passive.txt) 个6.2 第二阶段主动验证与Web探测echo [*] 开始HTTPX存活探测与指纹识别... # 解析域名到IP并去重 cat $OUTDIR/all_subs_passive.txt | dnsx -silent -a -resp-only -o $OUTDIR/resolved_ips.txt # 对子域名进行智能Web探测 cat $OUTDIR/all_subs_passive.txt | httpx -silent -title -status-code -tech-detect -ports 80,443,8080,8443,9000,7001 -o $OUTDIR/alive_web_details.txt # 对解析出的IP进行常见端口扫描这里以 top 100 为例实际可调整 echo [*] 对解析出的IP进行快速端口扫描... cat $OUTDIR/resolved_ips.txt | naabu -silent -top-ports 100 -o $OUTDIR/naabu_ports.txt echo [] 主动探测完成。存活Web资产详情见: $OUTDIR/alive_web_details.txt echo [] 开放端口信息见: $OUTDIR/naabu_ports.txt6.3 第三阶段信息整合与报告生成echo [*] 整合信息生成简易报告... # 提取纯存活域名列表 cat $OUTDIR/alive_web_details.txt | awk {print $1} | sort -u $OUTDIR/final_alive_domains.txt # 生成一个简单的CSV格式资产表 echo Domain,IP,Ports,Title,Technologies $OUTDIR/asset_inventory.csv # 这里需要编写更复杂的脚本将 httpx 和 naabu 的结果关联起来此处为示意 # 可以使用python或更高级的bash脚本来处理 echo [*] 使用 Aquatone 生成可视化报告 (如果资产较多)... if [ $(wc -l $OUTDIR/final_alive_domains.txt) -lt 50 ]; then cat $OUTDIR/final_alive_domains.txt | aquatone -out $OUTDIR/aquatone_report -screenshot-timeout 5000 echo [] 可视化报告已生成至: $OUTDIR/aquatone_report/aquatone_report.html else echo [-] 存活资产过多跳过Aquatone截图以避免长时间请求。 fi echo [!] 信息收集初步完成。请人工审查以下文件 echo - $OUTDIR/alive_web_details.txt (核心资产详情) echo - $OUTDIR/naabu_ports.txt (非Web服务) echo - $OUTDIR/aquatone_report/ (可视化截图如有) echo echo 下一步建议根据技术栈和业务重要性筛选出P0/P1级目标进行漏洞扫描和深度测试。这个脚本只是一个起点你可以根据项目需求添加更多模块比如GitHub监控、ASN查询、WAF识别等。7. 常见问题、踩坑经验与进阶技巧信息收集路上坑很多分享几个我印象深刻的。7.1 关于CDN与真实IP的“猫鼠游戏”这是最常见的问题。目标用了Cloudflare、Akamai等CDN你扫描到的IP都是CDN节点。应对策略历史DNS记录查询securitytrails.com,viewdns.info等网站看目标域名历史上是否直接解析到过真实IP。子域名探测很多公司只给主站www用了CDN而api、dev、mail等子域名可能直连源站。SSL证书关联在Censys/Shodan搜索目标证书的SHA256指纹可能会找到绑定同一证书但未接入CDN的其他IP或域名。邮件服务器给目标企业邮箱如adminexample.com发封邮件查看邮件头中的Received字段有时会泄露内部邮件服务器的IP。业务漏洞如果目标有移动App可以尝试抓包App内的API接口可能直连源站IP。我的心得不要执着于“找到唯一真实IP”。在现代云架构下真实IP可能是一个弹性负载均衡器后面还有多层网络。我们的目标是找到“可攻击的入口”。如果主站防护严密那些被忽略的、未接入CDN的子域名或测试环境往往是更好的突破口。7.2 工具误报与请求风暴误报工具可能把泛解析的域名*.example.com或CDN的边缘节点IP当作独立资产报出来。需要人工复核尤其是那些返回相同内容的资产。请求风暴使用masscan或高线程的httpx、ffuf时极易对目标造成DDoS攻击效果触发防火墙或导致服务不可用。解决方案始终使用-rate或-t参数限制速率。在脚本中加入sleep随机延迟。对于重要项目最好在本地或可控的VPS上先对一个小样本进行测试确定合适的速率阈值。7.3 信息过载与效率瓶颈当目标资产成千上万时如何高效处理分层处理不要试图一次性对所有资产进行深度扫描。先进行轻量级的存活探测和端口扫描快速筛选出一批“看起来有意思”的资产如开放了非常见端口、使用了特定技术栈的再对这批资产进行深度扫描和漏洞探测。用好grep,awk,jq命令行工具是处理文本数据的神器。例如快速筛选出所有使用了Spring Boot的资产cat alive_web_details.txt | grep -i spring | awk {print $1}引入消息队列和数据库对于超大型项目可以考虑用Redis做任务队列用MySQL或Elasticsearch存储资产数据并编写调度程序来管理扫描任务。但这属于高阶玩法需要一定的开发能力。7.4 法律与授权红线这是最重要的一条没有之一。授权范围严格在授权范围内进行测试。如果授权书只写了example.com那么example.net即使属于同一公司也不能测试除非获得书面补充授权。测试时间遵守约定的时间窗口如仅限工作时间。避免在业务高峰或深夜进行可能影响服务的扫描。敏感操作禁止使用--script vuln这类可能直接攻击漏洞的Nmap脚本除非授权明确允许。禁止对非授权目标进行暴力破解。数据保密收集到的所有信息包括可能意外发现的用户数据、源代码片段都必须严格保密仅在报告中使用测试结束后应安全删除。信息收集是红队工作的基石也是一门需要持续积累经验和更新知识的艺术。工具在变目标的防御手段在变但“侦察-分析-决策”的核心逻辑不变。这套流程和思路是我多年实战总结下来的它不一定是最快的但力求是稳健和全面的。真正的效率不在于你敲命令的速度而在于你能否从纷繁复杂的信息中迅速找到那条通往目标核心的、最隐蔽的路径。每次项目结束后记得复盘你的信息收集过程看看漏掉了什么哪些方法最有效不断迭代你自己的“武器库”和“战术手册”。