一个漏洞分类工具。它接收扫描已经发现的结果,推断哪些 CVE 可能适用,告诉你其置信度及依据,并给出可供你自行验证的命令。
它不扫描任何内容,也不利用任何内容。
git clone https://github.com/xGhst0/reconkg && cd reconkg && pip install -e . --break-system-packages && python -m reconkg.selfcheck
最后一步会报告它能看见什么、看不见什么:是否找到了 nmap 的 script.db、配置了哪些语料库,以及有多少真实指纹确实能产生线索。请先运行它。开箱即用的答案是“九个手写 CVE”,selfcheck 会如实说明这一点,而不是让你自行假设。
内置的九个条目只是演示用的固定样本。若要用于任何真实场景:
export NVD_API_KEY=... # free: https://nvd.nist.gov/developers/request-an-api-key
python -m reconkg.fetch --dest ~/.reconkg/feeds --all
python -m reconkg.builddb --feeds ~/.reconkg/feeds --out ~/.reconkg/vuln.db
export RECONKG_VULN_DB=~/.reconkg/vuln.db
export RECONKG_EXPLOIT_DB=~/.reconkg/exploits.db
export RECONKG_SCRIPT_DB=/usr/share/nmap/scripts/script.db
没有 API 密钥时,NVD 会将请求限制为每 30 秒 5 次,完整拉取大约需要四小时,而不是二十五分钟。它会进行检查点记录,因此中断的拉取可以恢复。--since 只拉取发生变化的内容。
如果设置了语料库变量但文件无法打开,reconkg 会拒绝启动。当你要求 300,000 条时却悄悄只提供九条,意味着扫描什么也找不到,却看起来像是成功了。
python -m reconkg.app # serves http://127.0.0.1:8765/ui
python -m reconkg.console # REPL
app 仅绑定回环地址,且没有可更改此行为的标志。该进程保存你的扫描结果,并发出针对你正在测试的主机的命令;与让这些内容从网络其余部分可达相比,SSH 隧道只是很小的代价。--port 可更改端口,RECONKG_PORT 可设置默认值。
身份验证。 每个路由都需要 Authorization: Bearer <token>,来自 RECONKG_TOKENS,格式为 name:role:token(角色:viewer、scanner、operator、admin;令牌至少 16 个字符)。如果未设置,app 会仅为该进程生成一个令牌并在启动时打印——不写入磁盘,每次重启都不同。
浏览器无法在普通导航中附加请求头,因此直接打开 /ui 会返回 401。请使用可注入请求头的扩展,或直接调用 API:
export RECONKG_TOKENS="me:admin:$(openssl rand -hex 16)"
curl -H "Authorization: Bearer ${RECONKG_TOKENS##*:}" \
http://127.0.0.1:8765/api/corpus
UI 在点击时显示带来源信息的知识图谱,因此你能看到某个 CVE 为何被关联到某台主机,而不是盲目相信一个评分;同时还有一个按分诊优先级排序、并纳入 KEV 和 EPSS 权重的台账。
每条建议的命令都带有一个 NSE 类别,描述运行它对目标会产生什么影响。这套词汇来自 nmap,并非凭空杜撰。
| 类别 | reconkg 的行为 |
|---|---|
safe、discovery、version | 组合生成,默认显示 |
intrusive、vuln、unclassified | 组合生成,勾选复选框后显示,并附带授权警告 |
exploit、dos、fuzzer、brute | 仅点名,绝不组合生成 |
最后一行就是边界。如果某条线索存在可用的漏洞利用,reconkg 会告诉你对应的模块或模板以及在哪里找到它。它不会把它组装成一条已经填入你目标的调用命令。Metasploit 建议止步于 show options —— 也就是你回读 RHOSTS 并确认它正是你获得授权针对的主机的那一步。
在你自己的机器上,这只是一次按键的差别;但对于这个工具究竟是什么,差别要大得多。
安全性按检查项分类,绝不按工具分类。这不是吹毛求疵:当前的 nuclei CVE 模板是通过利用来实现检测的 —— 其中一个模板通过 Langflow RCE 投递 subprocess.run('cat /etc/passwd') 载荷,并匹配 root:.*:0:0:。任何假定“nuclei 负责检测、Metasploit 负责利用”的说法,在遇到第一个模板时就会出错,因此 nuclei 被归为 unclassified,置于需主动选择启用的开关之后。
selfcheck 会打印真实的命中率,而不是一个好看的命中率。describe() 会将超过 30 天的语料库标记为过期,并指出哪个数据源已陈旧。pip install -r requirements-dev.txt
python -m pytest tests/ -q # 1219 tests
python -m audit.mutation # mutation testing, 12 targets at 100%
python -m audit.scale_bench # corpus scale benchmark
docs/ 包含设计说明以及上述决策背后的推理过程。audit/AUDIT.md 是发现记录:十轮对抗性测试中共有 47 项发现,其中包括对一种占其中 13 项的缺陷形态的分析,以及对哪些措施已阻止、哪些尚未阻止该缺陷的诚实评估。
MIT — 见 LICENSE。
reconkg 不附带任何漏洞数据。语料库在你的机器上由你自行获取的数据源构建,这样其许可证的遵守责任仍由你承担;尤其是 ExploitDB 的索引采用 GPL-2.0-or-later 许可,此处刻意从不重新分发。
reconkg 输出的一切内容都只是供人工执行的建议。对你不拥有或未获得书面授权测试的系统运行 intrusive 或 vuln 检查,在大多数司法管辖区均属违法。