简介
Recon-NG是一个功能齐全的侦察框架,其目的是提供一个强大的环境,以快速而彻底地进行开源的基于网络的侦察。
Recon-NG是用Python编写的功能丰富的Web侦察框架。 配有独立模块,数据库互动,内置的便利 功能,交互式帮助和命令完成,Recon-NG提供了强大的环境可以是基于网络的侦察迅速而彻底地进行。
Reconn-NG具有与Metasploit框架相似的外观和感觉,从而减少了学习曲线用于利用框架。但是,这是完全不同的。 Reconn-NG无意与现有框架竞争,因为它是设计的专门用于基于Web的开源侦察。如果您想渗透,使用Metasploit框架。如果您想进行社会工程学,请使用Social Engineer Toolkit(社会工程学工具包)。
安装
源码安装
通过以下命令进行克隆项目,建议请先提前挂好代理。
git clone https://github.com/lanmaster53/recon-ng.git
进入目录并查看
cd recon-ng/
ls
创建python虚拟空间,创建好后会出现一个venv文件夹。就说明创建成功了。
python3 -m venv venv
ls
激活虚拟空间,在终端前面出现我们创建的虚拟机空间的名称就说明进入虚拟空间了。
source venv/bin/activate
安装依赖项
pip install -r REQUIREMENTS
输入以下命令,如果出现这个界面就说明安装成功了。
./recon-ng -h
Docker 安装
请先确保安装好docker。
通过以下命令进行克隆项目,建议请先提前挂好代理。
git clone https://github.com/lanmaster53/recon-ng.git
进入目录并查看
cd recon-ng/
ls
拉取Python 3.7 镜像,建议请先提前给docker挂好国内镜像或给docker配置代理。
sudo docker pull python:3.7-alpine
构建Docker镜像
sudo docker build --rm -t recon-ng .
查看docker 镜像是否安装好 recon-ng 了。可以看到已经安装好了。
sudo docker images
输入以下命令就可以运行 Recon-ng
sudo docker run --rm -it recon-ng
Docker 容器安装
通过以下命令克隆项目,进入并查看。建议请先挂好代理。
git clone https://github.com/lanmaster53/recon-ng.git
cd recon-ng/
ls
拉取Python 3.7 镜像,建议请先提前给docker挂好国内镜像或给docker配置代理。
sudo docker pull python:3.7-alpine
构建容器
sudo docker-compose up -d --build
通过 ps 命令可以看到容器正在运行中
sudo docker-compose ps
输入以下命令,如果出现这个界面就说明安装成功了。
sudo docker exec -it recon-ng python3 recon-ng --help
APT 包管理器安装
Kali Linux 默认已经安装好 Recon-ng 工具了。也可以通过以下命令进行安装
sudo apt install recon-ng
使用
recon-ng
1. -h, --help
显示此帮助消息并退出
recon-ng -h
2. recon-ng 内的帮助信息
输入 recon-ng 即可启动 recon-ng 工具。会出现如下界面。
recon-ng
在v5中,初始状态不会有任何module,会看到这个,说明没有module启用与安装。
[*] No modules enabled/installed.
输入 help 可以查看帮助信息。
help
2.1 back
退出当前上下文
2.2 dashboard
显示活动摘要
2.3 db
与工作区数据库交互
语法:db <delete|insert|notes|query|schema> [...]
delete:删除
insert:插入
notes:注意
query:查询
schema:模式
显示数据库的信息
db schema
删除 credentials (凭证)里面的数据
db delete credentials
这样表示删除成功。0 行受影响。说明我们的 credentials (凭证)并没有数据。
往数据库添加一条数据。
db insert vulnerabilities
在 db 里面使用数据库语句进行查询。如果你之前学习过数据库,例如 MySQL 等。你应该会很熟悉这样的语句的。
db query SELECT host FROM vulnerabilities
2.4 exit
退出框架
2.5 goptions (加载了模块后才会出现)
管理全局上下文选项
语法:goptions <list|set|unset> [...]
list:列表
set:设置
unset:不设置
查看选项
goptions list
给 PROXY (代理)设置一个值,并查看。
goptions set PROXY ip地址:端口
goptions list
取消设置并再次查看。
goptions unset PROXY
goptions list
2.6 help 或 ?
显示此菜单
加载了模块后。帮助菜单会多几个选项出来。
2.7 index
创建模块索引(仅限开发)
语法:index <module|all> <index>
module:模块
all:全部
2.8 info(加载了模块后才会出现)
显示已加载模块的详细信息
2.9 input(加载了模块后才会出现)
根据源选项显示输入
2.10 keys
管理第三方资源凭据
语法:keys <add|list|remove> [...]
add:添加
list:列表
remove:移除
显示当前的密钥列表
keys list
可以看到我当前没有任何密钥。
添加一个 shodan 密钥
语法:keys add <name> <value>
<name>:密钥名称。可以自定义起名。
<value>:密钥的值。
keys add shodan 你的shodan API密钥
查看当前的密钥列表
keys list
可以看到我们已经有一个shodan的密钥在列表里。让我们来删除这个密钥。
keys remove shodan
这样 shodan 的密钥就移除。再次查看列表。可以看到确实删除了 shodan 的密钥了。
keys list
2.11 marketplace
与模块市场交互
语法:marketplace <info|install|refresh|remove|search> [...]
info:信息
install:安装
refresh:刷新
remove:移除
search:搜索
建议给终端配置好代理。不然可能出现无法搜索和安装模块。
我这里是给终端配置了临时代理。只要这个终端关闭的话,代理就失效了。当然也可以配置永久的代理。具体可以上网搜索一下。
export http_proxy=http://代理ip:端口
export https_proxy=http://代理ip:端口
测试代理是否生效,可以看到代理是生效了。
curl -vv https://www.google.com/
搜索所有的模块,可以看到这里有很多模块。
marketplace search
- Path:模块的路径
- Version:模块的当前版本
- Status:状态。not installed 表示未安装。
- Updated:更新的日期时间
- D:具有依赖项。
- K:需要密钥。
搜索 hackertarget 模块。
marketplace search hackertarget
可以看到确实有这个模块。当前并没有安装。显示一下模块的详细信息
语法:marketplace info <<path>|<prefix>|all>
<path>:模块路径
<prefix>:前缀
all:所有
marketplace info hackertarget
- path:模块路径
- name:名称
- author:作者
- version:模块版本
- last_updated:最后的更新时间
- description:对模块的简单描述
- required_keys:是否要求密钥
- dependencies:依赖项
- files:文件
- status:状态
我们来安装一下 hackertarget 模块,并再次查看一下信息。
marketplace install recon/domains-hosts/hackertarget
marketplace info hackertarget
可以看到在 status 这一栏显示 installed,就说明安装成功了。
refresh 命令可以刷新模块市场。
marketplace refresh
现在让我们来移除这个模块,并再次查看一下信息。
marketplace remove hackertarget
marketplace info hackertarget
可以看到我们成功移除了 hackertarget 模块。并且在 status 一栏显示 not installed,说明未安装。
2.12 modules
与已安装模块交互
语法:modules <load|reload|search> [...]
load:加载
reload:重新加载
search:搜索
搜索模块,显示所有可用的模块
modules search
可以看到我们当前有一个模块可以使用。我们来加载改模块来进行使用。
modules load whois_pocs
可以看到在终端前面多出来一个模块的名称就说明已加载了该模块。
可以通过 reload 命令重新加载模块。
modules reload whois_pocs
2.13 options
管理当前上下文选项
语法:options <list|set|unset> [...]
list:列表
set:设置
unset:不设置
显示当前的选项列表
options list
- NAMESERVER:名称服务器(NS),当前的值是8.8.8.8,要求必填写。解析器混合的默认名称服务器。
- PROXY:代理服务器(地址:端口)。不是必填写项,可以留空。
- THREADS:线程数(如适用),当前的值是10。必填写。
- TIMEOUT:套接字超时(秒),当前的值是10。必填写。
- USER-AGENT:用户代理字符串,当前的值是Recon-ng/v5。必填写。
- VERBOSITY:详细程度(0 = 最低,1 = 详细,2 = 调试),当前的值是1。必填写。
给当前的选项设置代理,并查看一下。
options set PROXY 192.168.174.129:10809
options list
可以看到在当前的 PROXY 的值是ip地址和端口。就说明设置成功了。我们来取消设置并再次查看一下。
options unset PROXY
options list
可以看到 PROXY 的值为空的。说明取消设置成功了。
如果载入一个模块后再次查看选项列表。会发现和上面不太一样。每个模块的选项列表都有差异。请留意一下。
2.14 pdb
启动 Python 调试器会话(仅限开发)
2.15 reload
重新加载已加载的模块
2.16 run
运行已加载的模块
2.17 script
记录并执行命令脚本
语法:script <execute|record|status|stop> [...]
execute:运行
record:记录
status:状态
stop:停止
2.18 shell
执行 shell 命令
语法:[shell|!] <command>
command:命令
2.19 show
显示各种框架项目
语法:show <companies|contacts|credentials|domains|hosts|leaks|locations|netblocks|ports|profiles|pushpins|repositories|vulnerabilities>
compaines:公司
contacts:联系人
credentials:凭证
domains:域名
hosts:主机
leaks:泄露
locations:位置
netblocks:网络块
ports:端口
profiles:配置文件
pushpins:图钉
repositories:存储库
vulnerabilities:漏洞
显示域名和主机。因为我当前没有任何数据,所以什么都不会显示。
show domains
show hosts
2.20 snapshots
管理工作区快照
语法:snapshots <list|load|remove|take> [...]
list:列表
load:加载
remove:移除
take:拍取快照
查看当前的快照列表,可以看到我当前没有任何一个快照。
snapshots list
我们来拍摄一个快照。并再次查看一下。
snapshots take
snapshots list
可以看到我们成功拍摄了一个快照,并且快照的名称是按时间日期来起名的。现在让我们来加载它。
snapshots load snapshot_20250225143351.db
现在让我们删除这个快照并再次查看快照列表。可以看到快照已经被我们删除了。
snapshots remove snapshot_20250225143351.db
snapshots list
2.21 spool
将输出假脱机到文件
语法:spool <start|status|stop> [...]
start:启动
status:状态
stop:停止
2.22 workspaces
管理工作区
语法:workspaces <create|list|load|remove> [...]
create:创建
list:列表
load:加载
remove:移除
显示当前有哪些工作空间
workspaces list
Workspaces指工作空间的名称,Modified指修改的日期与时间。可以看到当前有一个默认的(default)的工作空间。
创建一个工作空间。命名为recon-ng,这样当前的工作空间就会被替换成我们刚刚创建好的工作空间recon-ng了。
workspaces create recon-ng
再次查看当前有哪些工作空间
workspaces list
可以看到我们确实是创建了一个名为 recon-ng 的工作空间了。现在我们删除这个工作空间。
workspaces remove recon-ng
可以看到我们的工作空间由 recon-ng 变成了 default,再次查看一下空间列表。
workspaces list
recon-ng 确实是被删除了。
3. -w workspace
加载/创建工作区
以下命令就创建了一个名叫 test 的工作区并加载它去运行。
recon-ng -w test
4. -r filename
从资源文件加载命令
recon-ng -r filename
5. --no-version
禁用版本检查。在 Debian 中已默认禁用
recon-ng --no-version
6. --no-analytics
禁用分析报告。在 Debian 中已默认禁用
recon-ng --no-analytics
7. --no-marketplace
禁用远程模块管理
这里可以看到模块市场已被禁用了。
recon-ng --no-marketplace
8. --stealth
禁用所有被动请求 (--no-*)
recon-ng --stealth
9. --accessible
使用可用时的可访问输出
recon-ng --accessible
10. --version
显示当前版本
recon-ng --version
recon-cli
允许从命令行使用 recon-ng
1. -h, --help
显示此帮助消息并退出
recon-cli -h
2. -w workspace
加载/创建工作区
recon-cli -w test
3. -C command
在全局上下文中运行命令
recon-cli -C shell
4. -c command
在模块上下文中运行命令(预运行)
recon-cli -c shell
5. -G
显示可用的全局选项
recon-cli -G
6. -g name=value
设置全局选项(可多次使用)
recon-cli -g PROXY=192.168.174.129:7890
7. -M
显示模块
recon-cli -M
8. -m module
指定模块
recon-cli -m hackertarget
9. -O
显示可用的模块选项
recon-cli -m hackertarget -O
10. -o name=value
设置模块选项(可多次使用)
recon-cli -m hackertarget -O -o SOURCE=www.example.com
11. -x
运行模块
recon-cli -m hackertarget -O -o SOURCE=www.example.com -x
12. --no-version
禁用版本检查(Debian 默认)
recon-cli --no-version
13. --no-analytics
禁用分析报告(Debian 默认)
recon-cli -m hackertarget -O --no-analytics
14. --no-marketplace
禁用远程模块管理
15. --stealth
禁用所有被动请求 (--no-*)
recon-cli --no-marketplace --stealth
16. --version
显示当前版本
recon-cli --version
17. --analytics
启用分析报告。将分析发送给 Google
recon-cli --analytics
recon-web
Recon-ng 的基于 Web 的用户界面。
Recon-web 是 Recon-ng 的分析和报告引擎。这是一个基于 Web 的用户界面。用户只需在浏览器中打开打印的 URL 即可开始使用。它还包括 Recon-API,可通过 `/api/` URL 访问。
1. -h, --help
显示此帮助消息并退出
recon-web -h
2. --host HOST IP
要监听的地址
3. --port PORT
要将 Web 服务器绑定到的端口
recon-web --host 127.0.0.1 --port 5000
示例
recon-ng
我们输入 recon-ng 命令启动 recon-ng 工具。
recon-ng
刷新模块市场。
marketplace refresh
我们搜索一个名叫 xssed 的模块,可以看到确实有这个模块的存在,并且还是未安装的。
marketplace search xssed
查询一下 xssed 模块的相关信息。这个模块的功能是检查 XSSed.com 中与域相关的 XSS 记录并显示前 20 个结果。
marketplace info xssed
我们来安装这个模块
marketplace install recon/domains-vulnerabilities/xssed
查看一下我们当前已安装了哪些模块。可以看到 xssed 模块已经安装好了。
modules search
加载 xssed 模块,可以看到我们终端前面出现个 xssed ,就说明加载成功了。
modules load xssed
查看一下配置选项。
options list
在 SOURCE (来源)选项这一栏里面我们要修改一下当前的值,设置为我们要测试的目标网址。这个是必填项。我们把值设置为 cisco.com 。即我们要测试的目标网址。并查看是否修改成功。
options set SOURCE cisco.com
options list
可以看到 SOURCE 的值已经成功修改为 cisco.com 了。
输入 info 还可以查看更详细的信息。
info
(可选项)我们还可以修改一下我们的全局设置。我想给我的全局设置添加一个代理。这一步是可选项。可以不必跟着操作。
goptions list
goptions set PROXY ip地址:端口
goptions list
当你完成上述操作后就可以开始运行了。输入 run 开始运行。
run
- Category(类别): Redirect (重定向)
- Example:示例。
- Host:主机。
- Notes: 注释
- Publish_Date:发布日期
- Reference:参考
- Status(状态): unfixed(未修复)
由于篇幅太长。这里没法截取所有的信息。最后 SUMMARY (概括)会总结出共发现13个漏洞。
查看结果。这些查看结果得根据你运行获得的类型去查看。因为我们返回的是 vulnerabilities (漏洞)的类型。所以要查看漏洞结果。其他的类型是没有数据返回的。
show vulnerabilities
可以看到我们一共返回了13个 vulnerabilities (漏洞)的结果。
recon-cli
(可选项)查看当前的全局设置。可以看到在 PROXY(代理)选项是空的。我们可以给它设置一个值。这一个步骤不是必须的。可以跳过此步骤。
recon-cli -G
recon-cli -G -g PROXY=ip地址:端口
可以看到我们成功设置了一个代理。
查看我们当前有哪些模块。可以看到我们有 xssed 模块。
recon-cli -M
载入 xssed 模块。并查看有哪些选项。
recon-cli -m xssed -O
修改 SOURCE 的值为我们要测试的目标网址。
recon-cli -m xssed -O -o SOURCE=cisco.com
可以看到我们修改成功,接下来运行这个模块。
recon-cli -m xssed -x
查看结果
recon-cli -m xssed -c "show vulnerabilities"
recon-web
运行 recon-web ,并打开网址。默认网址是:http://127.0.0.1:5000。当然也可以自己指定主机和端口。
recon-web
可以看到有我们上面做过的测试之后保留得到的结果。我们来查看一下。左侧是各个信息的结果数量。右侧这个是我们之前安装的 xssed 模块。
我们点击上面 Tables (表)的 vulnerabilities,就可以查看到我们之前测试的结果了。
Fields (字段) 这一栏可以来过滤一下我们的数据。过滤掉其他的数据。只保留我们需要的数据。点选其中一项会有一层浅浅的颜色由灰色变成白色显示,就说明打开选项了。
Export(导出)这一栏可以导出数据。可以看按自己的需求去导出数据类型。
这里我使用 csv 的格式导出。之后就可以在 Excel 里面查看。
总结
Recon-ng 是一款功能强大的网络侦察框架,提供丰富的模块和灵活的接口,能够高效地进行信息收集和分析。它适用于渗透测试人员和安全分析师,支持自动化操作,提升了网络安全评估的效率和准确性。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。