nuclide-research/nu-recon
GitHub: nuclide-research/nu-recon
nu-recon是一款单主机被动侦察工具,生成JSON报告。
Stars: 0 | Forks: 0
# nu-recon
单主机被动侦察:一个IPv4地址输入,一个JSON报告输出。
nu-recon在发送主动扫描流量之前查询四个来源:通过`gethostbyaddr`进行反向DNS查询,使用Shodan主机API查询开放端口和服务标志,通过在指定端口上使用stdlib `ssl`进行TLS证书抓取,以及通过主机名在crt.sh上进行证书透明度查找。它将结果组装成一个扁平的JSON报告,包含每个服务的威胁图和低/中/高风险摘要。当没有Shodan密钥可用时,它将使用标记的占位符值并标记输出中的`simulated: true`。
## 安装
```
pip install -r requirements.txt
# 可编辑:
pip install -e .
```
Python 3.10+. 一个依赖项:`requests>=2.31`。入口点:`nu-recon`(通过`pyproject.toml`注册)。
## 使用
```
nu-recon 192.0.2.10
nu-recon 192.0.2.10 -o report.json
nu-recon 192.0.2.10 --ssl-port 8443 --crtsh-identity example.com
nu-recon 192.0.2.10 --no-network
nu-recon 192.0.2.10 -v
```
| 标志 | 默认值 | 作用 |
|------|---------|--------|
| `target` | required | IPv4地址;在解析时验证 |
| `-o, --output` | `host-report.json` | 输出JSON路径 |
| `--shodan-key` | `SHODAN_API_KEY`环境变量 | 覆盖环境变量 |
| `--ssl-port` | `443` | 证书抓取的TLS端口 |
| `--crtsh-identity` | PTR名称 | 在crt.sh上查询的域名(覆盖解析的PTR) |
| `-v, --verbose` | off | 调试日志 |
| `--no-network` | off | 跳过所有网络调用;加载模拟数据 |
## 报告字段
| 字段 | 内容 |
|-------|---------|
| `target_ip` | 输入地址 |
| `hostname` | PTR记录,或第一个Shodan主机名 |
| `geolocation` | 来自Shodan的`country`、`city`、`org`、`isp` |
| `open_ports` | 整数列表 |
| `services` | `{port, product, version, transport, banner}`列表 |
| `web_technologies` | 端口80、443、8080、8443的`{port, server, version}` |
| `ssl_certificate` | `port`、`subject`、`issuer`、`not_before`、`not_after`、`serial_number`、`san`、`der_sha256_bytes` |
| `crtsh_domains` | 来自crt.sh的排序唯一域名 |
| `threat_graph` | 每个服务的`{threat, impact, likelihood, mitigation}`条目(ssh、web、mysql、rdp) |
| `risk_summary` | `overall_risk`(低/中/高)、`open_ports_count`、`vulnerability_count`、`exposed_databases`、`exposed_management`、`recommendation` |
| `simulated` | 当Shodan数据被替换时为`true` |
风险等级逻辑:任何暴露的数据库端口(3306、5432、27017、6379、9200、1433)→ `高`;两个或更多漏洞,或具有超过五个总开放端口的托管端口→ `中`;否则 `低`。
## 示例
```
$ nu-recon 192.0.2.10 -o report.json
INFO nurecon.mapper: reverse DNS: host.example.com
INFO nurecon.mapper: crt.sh: 3 unique names
[+] report: report.json
{
"timestamp": "2026-06-03T12:00:00+00:00",
"target_ip": "192.0.2.10",
"hostname": "host.example.com",
"geolocation": {"country": "US", "city": "Anytown", "org": "Example Corp", "isp": "Example ISP"},
"open_ports": [22, 443],
"services": [
{"port": 22, "product": "OpenSSH", "version": "8.9", "transport": "tcp", "banner": null},
{"port": 443, "product": "nginx", "version": "1.24", "transport": "tcp", "banner": null}
],
"web_technologies": [{"port": 443, "server": "nginx", "version": "1.24"}],
"vulnerabilities": [],
"dns_records": {},
"ssl_certificate": {
"port": 443,
"subject": {"commonName": "host.example.com"},
"issuer": {"organizationName": "Let's Encrypt"},
"not_before": "Mar 1 00:00:00 2026 GMT",
"not_after": "Jun 1 00:00:00 2026 GMT",
"san": ["host.example.com"],
"der_sha256_bytes": 1234
},
"crtsh_domains": ["host.example.com", "mail.example.com", "www.example.com"],
"threat_graph": {
"ssh": [{"threat": "credential-based auth exposure", "impact": "interactive session",
"likelihood": "medium", "mitigation": "key-only auth, fail2ban, source-IP allowlist"}],
"web:nginx:443": [{"threat": "web application surface (injection, auth bypass, RCE)",
"impact": "data access or host compromise", "likelihood": "depends on app",
"mitigation": "patch, WAF, input validation"}]
},
"risk_summary": {
"overall_risk": "low",
"open_ports_count": 2,
"vulnerability_count": 0,
"exposed_databases": [],
"exposed_management": [22],
"recommendation": "reduce attack surface; verify each exposed service is intended"
},
"simulated": false
}
```
## 测试
```
pip install -r requirements-dev.txt
pytest
```
## nu-recon不是什么
nu-recon读取四个被动来源并打开一个TLS套接字。它不扫描端口,不进行暴力破解凭据,也不运行漏洞利用流量。TLS证书抓取创建一个TCP连接以检索对等证书。Shodan和crt.sh查询仍然会在那些服务上生成日志条目;请根据您拥有的资产或明确授权测试的资产进行使用。
## 许可证
MIT。NuClide工具链的一部分。联系:[nuclide-research.com](https://nuclide-research.com)
标签:逆向工具