尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Recon-ng实战指南:从零掌握OSINT侦察框架与自动化信息收集

Recon-ng实战指南:从零掌握OSINT侦察框架与自动化信息收集
📅 发布时间:2026/7/2 23:44:49

1. 项目概述:为什么我们需要Recon-ng?

如果你在网络安全领域摸爬滚打过一段时间,尤其是做过渗透测试或者红队评估,那你一定对“信息收集”这四个字的份量深有体会。它远不止是打开搜索引擎输入一个公司名那么简单。一个成功的渗透,其基石往往是在攻击链最前端的侦察阶段就奠定的。你需要知道目标暴露在互联网上的所有资产:域名、子域名、IP地址、开放的端口、运行的服务、甚至是从业人员的邮箱、社交账号和无意中泄露的敏感文档。传统的手工收集效率低下,而自动化工具又往往功能单一。这时候,一个强大、模块化且可扩展的侦察框架就显得至关重要——这就是Recon-ng的价值所在。

Recon-ng并非一个简单的“扫描器”,它是一个用Python编写的、完全模块化的开源情报(OSINT)收集框架。它的设计哲学模仿了著名的Metasploit框架,拥有统一的工作区(Workspace)管理、模块化的功能(Modules)以及内建的数据库支持。这意味着你可以像在Metasploit里使用exploit模块一样,在Recon-ng里按需加载“侦察模块”。这些模块各司其职,有的负责从证书透明度日志中挖掘子域名,有的负责在各大社交网络和代码仓库中搜索邮箱,有的则能对发现的Web服务进行截图和基础指纹识别。它的强大之处在于,它将散落在互联网各个角落的OSINT源和查询技巧,封装成了一个个可即插即用的工具,并且通过工作区将收集到的数据(主机、联系人、凭证等)有机地关联起来,形成一幅不断丰富的目标情报图谱。

我最初接触Recon-ng是因为一次内部红队演练。面对一个资产庞杂的集团目标,手动收集让我精疲力尽。直到我系统性地使用了Recon-ng,通过几个模块的链式调用,在几个小时内就梳理出了目标上百个子域名和关联的数十个员工邮箱,其中一些邮箱还在历史数据泄露中被找到,直接为后续的钓鱼攻击和密码爆破提供了精准的入口。从那以后,Recon-ng就成了我信息收集阶段的“瑞士军刀”。本教程的目的,就是带你从零开始,彻底掌握这把利器,不仅仅是会敲几个命令,更要理解其设计思想、每个核心参数的含义,以及如何组合模块进行高效、深入的网络侦察。

2. 环境准备与框架初探

2.1 Kali Linux下的安装与启动

对于绝大多数安全从业者来说,Kali Linux是进行渗透测试和网络安全学习的首选平台。好消息是,从Kali 2020.x版本开始,Recon-ng已经被预装在系统中。你不需要进行复杂的编译安装过程。

打开你的Kali Linux终端,直接输入recon-ng即可启动框架。你会看到一个简洁的、带有版本号(例如v5.1.1)的启动界面,并进入recon-ng >的命令行提示符。这里就是你的主战场。如果你在更新的Kali版本中发现没有预装,或者你想在其他Debian/Ubuntu系统上安装,也只需一条命令:sudo apt update && sudo apt install recon-ng。

第一次启动时,Recon-ng会提示你运行keys add命令来添加各种API密钥。这是Recon-ng发挥威力的关键一步。许多强大的侦察模块需要调用第三方服务(如Shodan, Censys, Hunter.io, GitHub等)的API来获取数据。没有这些密钥,对应的模块就无法工作,或者功能受限。你可以先输入keys list查看当前需要哪些密钥,然后根据提示,使用keys add <服务名> <你的API密钥>来逐一添加。例如,添加Shodan的密钥:keys add shodan_api YOUR_SHODAN_API_KEY。获取这些API密钥通常需要到对应服务的官网注册免费或付费账户。

注意:妥善保管你的API密钥,并了解每个服务的免费额度和使用条款。在自动化脚本中频繁、大量地调用API可能导致额度迅速耗尽或被临时封禁。

2.2 核心概念解析:工作区、模块与数据库

在深入参数之前,必须理解Recon-ng的三个核心概念,这决定了你如何使用它。

工作区(Workspace):这是Recon-ng组织数据的核心单元。想象它是一个独立的项目文件夹。所有针对某个特定目标(比如“acme_corp”)的侦察数据——发现的域名、IP、联系人、凭证等——都存储在一个独立的工作区内。这样做的好处是数据隔离清晰,你可以同时开展多个目标的侦察而互不干扰。使用workspaces命令可以列出所有工作区,使用workspaces create acme_corp可以创建名为“acme_corp”的新工作区,使用workspaces load acme_corp则可以切换进去。

模块(Modules):模块是Recon-ng的功能载体。它们分为几大类:

  • 侦察(Recon)模块:核心的收集模块,用于主动发现信息。例如recon/domains-hosts/brute_hosts用于子域名爆破。
  • 报告(Reporting)模块:用于将数据库中的信息导出为特定格式的报告,如HTML、CSV。例如reporting/html。
  • 导入(Import)模块:用于从外部文件(如Nmap扫描结果、域名列表)将数据导入到当前工作区数据库。
  • 发现(Discovery)模块:用于对已存入数据库的资源(如主机)进行进一步的探索和丰富。
  • 利用(Exploitation)模块:数量较少,用于对发现的漏洞进行简单验证。

使用modules search命令可以搜索模块,例如modules search shodan。使用modules load命令加载模块,例如modules load recon/domains-hosts/certificate_transparency。

数据库:每个工作区背后都有一个SQLite数据库文件(默认位于~/.recon-ng/workspaces/<workspace_name>/data.db)。所有模块收集到的结构化数据都存储在这里。你甚至可以直接用SQL命令查询,例如在Recon-ng提示符下输入query select * from hosts来查看所有主机记录。这种设计使得数据可以被不同模块反复利用和关联。

3. 核心模块参数详解与实战配置

仅仅加载模块是不够的,你必须学会如何“喂养”它目标和配置参数。这是从“会用”到“精通”的关键跨越。我们以几个最常用、最强大的模块为例,深入剖析每个参数。

3.1 域名与子域名发现模块

子域名枚举是外围侦察的第一步。Recon-ng提供了多种途径。

模块:recon/domains-hosts/certificate_transparency这个模块通过查询证书透明度(CT)日志来发现为目标域名签发的SSL/TLS证书,从而找到关联的子域名。这是一种被动、高效且覆盖面广的方法。

  • SOURCE: 这是最重要的参数。它指定从哪个“源”获取要查询的域名。它不是一个让你直接输入域名的地方。通常,你需要先使用add domains命令将主域名(例如acme.com)添加到数据库的domains表中。然后,将SOURCE参数设置为default,模块会自动从domains表中读取域名进行查询。你也可以设置为一个包含域名的文本文件路径(每行一个域名)。
  • LIMIT: 限制每个域名查询返回的结果数量。对于CT日志,通常返回结果很多,设置一个合理的限制(如100)可以避免初期数据过载。
  • 端口与协议参数: 此模块不涉及。

实操流程:

recon-ng > workspaces create acme_test recon-ng [acme_test] > add domains acme.com recon-ng [acme_test] > modules load recon/domains-hosts/certificate_transparency recon-ng [acme_test][certificate_transparency] > options set SOURCE default recon-ng [acme_test][certificate_transparency] > options set LIMIT 50 recon-ng [acme_test][certificate_transparency] > run

运行后,发现的子域名(如dev.acme.com,mail.acme.com)会自动存入hosts表。

模块:recon/domains-hosts/brute_hosts当被动收集不够时,就需要字典爆破。这个模块使用内置或自定义的字典进行子域名枚举。

  • SOURCE: 同上,设置为default从domains表读取主域名。
  • WORDLIST: 指定用于爆破的字典文件路径。Recon-ng内置了一个字典(/usr/share/recon-ng/data/hostnames.txt),你可以通过options set WORDLIST /path/to/your/wordlist.txt来使用更强大、更新的自定义字典,这在实战中几乎是必须的。
  • 线程数参数: 此模块没有直接的线程控制,其速度主要受字典大小和网络延迟影响。

实操心得:永远不要只依赖一种方法。最佳实践是:先用certificate_transparency进行被动收集,再用brute_hosts配合一个高质量的字典(如subdomains-top1million-5000.txt)进行补充爆破。之后,还可以使用recon/domains-hosts/google_site_web等模块利用搜索引擎语法进行发现。将多种方法的结果汇总,才能最大限度地覆盖目标资产。

3.2 主机信息丰富与端口扫描模块

发现主机名后,下一步是解析IP并探测开放端口和服务。

模块:recon/hosts-hosts/resolve这个模块很简单,但必不可少。它将hosts表中的主机名解析为IP地址,结果存入hosts表对应的ip_address字段。

  • SOURCE: 设置为default,自动处理hosts表中所有未解析的主机。
  • 无其他关键参数。运行run即可。

模块:recon/hosts-ports/shodan_ip这是体现Recon-ng集成能力的一个亮点。它利用Shodan的API,查询目标IP地址的开放端口、运行服务、Banner信息,甚至是一些漏洞信息。这比你自己进行全端口扫描要快得多,并且利用了Shodan庞大的历史扫描数据库。

  • SOURCE: 设置为default,从hosts表中读取已解析出IP的主机。
  • LIMIT: Shodan API的查询限制。免费API通常有查询次数限制,谨慎设置。
  • 端口与协议参数: 此模块的参数由Shodan API控制,你无法指定扫描哪些端口,Shodan会返回它已知的所有信息。

配置与运行示例(假设已添加Shodan API Key):

recon-ng [acme_test] > modules load recon/hosts-ports/shodan_ip recon-ng [acme_test][shodan_ip] > options set SOURCE default recon-ng [acme_test][shodan_ip] > run

运行后,端口、服务等信息会存入ports表,并与对应的主机关联。

注意事项:Shodan模块非常强大,但严重依赖API密钥的质量和额度。在大型项目中,优先对重要的、核心的IP地址使用此模块。对于大量IP,可以结合使用import模块导入Nmap的XML结果,或者使用Recon-ng内更基础的端口扫描模块(如使用Masscan或自定义脚本),但这通常需要更多配置。

3.3 联系人与邮箱收集模块

人员是安全链条中最薄弱的一环。收集目标组织员工的邮箱和社交信息,对于社会工程学攻击和密码喷洒攻击至关重要。

模块:recon/domains-contacts/whois_pocs这个模块通过查询域名的WHOIS信息,来获取注册时留下的管理员、技术联系人等邮箱地址(POC - Point of Contact)。

  • SOURCE: 设置为default,从domains表读取域名。
  • 无其他关键参数。但WHOIS信息的质量和隐私保护程度因注册商而异,可能收获有限。

模块:recon/contacts-contacts/mailtester这是一个非常实用的模块,用于验证从各处收集到的邮箱地址是否有效。它会连接目标邮件服务器,模拟发送邮件的过程(但不真的发送),从而判断邮箱是否存在。

  • SOURCE: 设置为default,从contacts表中读取所有邮箱地址进行验证。
  • 无其他关键参数。运行后,有效的邮箱会在数据库中被标记。

高级模块示例:recon/contacts-credentials/hibp_breach这个模块需要HIBP_API_KEY(Have I Been Pwned服务的API密钥)。它用于检查收集到的邮箱是否出现在已知的公开数据泄露事件中。如果发现泄露,可能会关联到该邮箱使用的密码(哈希值),这对于后续的凭证填充攻击极具价值。

  • SOURCE: 设置为default,从contacts表读取邮箱。
  • LIMIT: 控制API请求频率。

组合使用流程:

  1. 先通过whois_pocs、recon/contacts-contacts/hunterio(需API)等模块收集一批邮箱到contacts表。
  2. 使用mailtester验证这些邮箱,剔除无效的。
  3. 对验证有效的邮箱,使用hibp_breach检查其是否已泄露。 这个工作流能帮你快速筛选出高价值的攻击目标。

4. 工作流设计与自动化脚本

单独运行模块是基础,但Recon-ng真正的威力在于将多个模块串联起来,形成自动化侦察流水线。这可以通过两种方式实现:交互式命令序列和资源文件。

4.1 交互式命令序列

你可以在Recon-ng提示符下,按顺序执行一系列命令。例如,一个针对新目标的快速侦察流程可能如下:

workspaces create new_target add domains target-company.com modules load recon/domains-hosts/certificate_transparency options set SOURCE default run modules load recon/domains-hosts/brute_hosts options set SOURCE default options set WORDLIST /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt run modules load recon/hosts-hosts/resolve options set SOURCE default run modules load recon/hosts-ports/shodan_ip options set SOURCE default run modules load reporting/html options set CREATOR “Your Name” options set CUSTOMER “Target Company” run

这个序列完成了从创建空间、发现子域、解析IP、Shodan查询到生成HTML报告的全过程。你可以把这一系列命令保存到一个文本文件中。

4.2 使用资源文件实现自动化

这是更优雅和可重复使用的方法。Recon-ng支持执行扩展名为.rc的资源文件。在这个文件里,你可以写入所有要执行的命令,就像在上面交互环境里输入的一样。

创建一个文件,例如full_recon.rc,内容如下:

workspaces create auto_target add domains example.org modules load recon/domains-hosts/certificate_transparency options set SOURCE default run modules load recon/domains-hosts/brute_hosts options set SOURCE default options set WORDLIST /path/to/wordlist.txt run modules load recon/hosts-hosts/resolve options set SOURCE default run # 暂停一下,检查结果,或者有条件地执行下一步 # modules load recon/hosts-ports/shodan_ip # options set SOURCE default # run modules load reporting/csv options set FILENAME /tmp/results.csv run

然后,在启动Recon-ng时直接指定这个资源文件:recon-ng -r full_recon.rc。或者,在Recon-ng内部使用resource full_recon.rc命令来执行。

实操心得:在编写复杂的资源文件时,善用query命令和条件判断。例如,你可以先查询hosts表中有多少条未解析的记录,如果大于0才执行解析模块。虽然Recon-ng本身没有像编程语言那样的if/else语法,但你可以通过编写外部Shell脚本来调用Recon-ng并实现更复杂的逻辑。对于大型项目,我通常会分阶段执行:第一阶段(被动收集) -> 人工审核去重 -> 第二阶段(主动爆破与验证) -> 第三阶段(深度信息丰富与漏洞筛查)。

5. 数据管理与报告输出

收集了大量数据后,如何管理和呈现它们同样重要。

5.1 数据库查询与数据维护

所有数据都在SQLite数据库里,因此SQL技能能让你如虎添翼。在Recon-ng提示符下使用query命令:

  • query select host, ip_address from hosts where ip_address is not null;查看所有已解析IP的主机。
  • query select email, module from contacts where module like ‘%hunter%’;查看由Hunter.io模块发现的邮箱。
  • query delete from hosts where host like ‘%.png’;删除一些误报的、以.png结尾的“主机”(通常是CT日志中的误报)。

你还可以使用.headers on和.mode column在查询前让输出更美观。对于复杂分析,甚至可以将数据库文件(data.db)用SQLite图形化工具(如DB Browser for SQLite)打开进行可视化操作。

5.2 报告生成模块

侦察的最终产出是报告。Recon-ng内置了多种报告模块。

  • reporting/csv: 生成CSV文件。非常灵活,可以导入到Excel或其他数据分析工具中。你需要设置FILENAME参数来指定输出路径。
  • reporting/html: 生成一个美观的HTML报告,包含表格和图表,适合直接交付。需要设置CREATOR(报告作者)和CUSTOMER(客户名称)等参数。
  • reporting/json: 生成JSON格式的报告,便于被其他自动化程序或平台解析。

HTML报告配置示例:

modules load reporting/html options set CREATOR “Security Team” options set CUSTOMER “Acme Corp” options set FILENAME /home/kali/Desktop/acme_recon_report.html run

生成的报告会汇总工作区中的所有发现,按类别(域名、主机、联系人、凭证等)呈现,一目了然。

6. 常见问题排查与性能优化

即使对老手来说,使用Recon-ng也会遇到各种“坑”。这里记录一些典型问题和解决思路。

6.1 模块执行失败与API限制

  • 问题:运行某个模块(特别是需要API的,如Shodan, Hunter)时,提示“Request failed”或“Limit exceeded”。
  • 排查:首先,用keys list确认对应的API密钥是否已正确添加且未过期。其次,查看该服务的API控制台,确认免费额度是否用尽。许多免费API有每分钟/每日的请求次数限制。
  • 解决:对于需要大量查询的目标,考虑购买付费API套餐。或者,在资源文件中使用sleep命令(注意:原生Recon-ng可能不支持,需在外部脚本实现)在模块执行间加入延时,避免触发速率限制。也可以将目标列表拆分成多个小批次,分多次执行。

6.2 数据重复与误报

  • 问题:hosts表中存在大量重复条目或明显误报(如*.cloudfront.net这类CDN域名)。
  • 排查:重复通常是因为多个模块发现了同一个资产。误报常见于CT日志模块,它会抓取证书中所有域名,包括一些泛域名或第三方服务域名。
  • 解决:
    1. 去重:使用SQL命令清理。例如,保留唯一主机名:query delete from hosts where rowid not in (select min(rowid) from hosts group by host);。操作前建议先备份或导出数据。
    2. 过滤:在导入或运行模块后,编写SQL语句删除包含特定关键词的误报。例如:query delete from hosts where host like ‘%.cloudfront.net’ or host like ‘%.amazonaws.com’;。更高级的做法是,在运行模块前,如果模块支持,通过修改模块代码或使用管道过滤输入源,但这需要一定的Python功底。

6.3 性能优化建议

  1. 字典选择:子域名爆破的效率和效果直接取决于字典质量。不要只用内置的小字典。推荐使用Seclists项目中的大型子域名字典,并根据目标行业特性进行增补。
  2. 目标聚焦:在启动大规模侦察前,先手动收集一波(如公司官网、招聘信息、新闻稿),将明确属于目标的根域名、子公司域名先添加到domains表,这能引导后续自动化侦察的方向,减少噪音。
  3. 分阶段执行:不要试图在一个资源文件里运行所有模块。将被动收集(CT日志、DNS查询)和主动爆破分开。先运行被动模块,评估结果,对发现的核心资产再运行耗时的主动扫描或API查询模块。
  4. 数据库维护:定期清理旧工作区或无用的数据。大的数据库文件可能会稍微影响查询速度。可以使用query VACUUM;命令来压缩数据库文件,释放空间。

6.4 网络连接与代理配置

在某些工作环境下,你可能需要通过代理服务器访问互联网。Recon-ng底层使用Python的requests库,可以通过设置系统环境变量(如HTTP_PROXY,HTTPS_PROXY)来让所有模块的请求都经过代理。在启动Recon-ng之前,在终端中执行:

export HTTP_PROXY=http://your-proxy-ip:port export HTTPS_PROXY=http://your-proxy-ip:port recon-ng

请注意,这会影响所有网络请求,包括API调用和模块自身的连接。如果代理需要认证,格式为http://username:password@proxy-ip:port。确保代理稳定,避免因网络问题导致模块超时失败。

相关新闻

  • Python AES加密实战:aes-bridge简化开发与跨平台数据安全
  • 2026大运流年八字排盘软件怎么选:看时间轴、复盘记录和AI边界
  • C++异常处理入门(try和catch)

最新新闻

  • 【2025实测指南】录音转行动项用什么工具?新手避坑干货
  • FIRRTL宽度推断:形式化建模与高效求解算法
  • 基于IIM-42652 IMU的6DoF运动追踪系统设计与实现
  • crictl 实战指南:没有 docker 命令后,Kubernetes 节点该怎么排障?
  • AI智能体工作流开发实战:从原理到应用
  • [AI][昇腾950]MixCore 最高效同步

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号