cr0nica1/p2o-bot-updater

GitHub: cr0nica1/p2o-bot-updater

一个面向 Pwn2Own 赛事的 Discord 机器人和 CLI 工具,用于追踪目标设备的漏洞信息与固件版本,支持从 NVD/ZDI 自动同步数据并定时推送通知。

Stars: 0 | Forks: 0

# Pwn2Own Target Updater ## 描述 Pwn2Own Target Updater 是一个 Discord bot 和 CLI 工具包,用于追踪 Pwn2Own 目标的漏洞和固件信息。 该项目将标准化后的目标数据存储在 MongoDB 中,从公开来源同步漏洞信息,并提供用于目标管理、漏洞查找、计划通知和固件查找的 Discord slash command。它支持目标别名以实现更广泛的 CVE/ZDI 匹配,并支持为那些可以从供应商网页上发现固件的产品配置供应商固件。 主要功能: - 管理目标、别名、供应商、类别和供应商固件别名。 - 从 CSV 导入目标。 - 从 NIST NVD 和 ZDI 公告页面同步漏洞信息。 - 在 Discord 中搜索并显示已存储的漏洞。 - 安排每日同步和通知任务。 - 配置供应商固件查找 URL 和 regex。 - 从已配置的供应商页面查找固件版本。 - 将存储的漏洞数据导出为 JSON。 ## 架构 代码库采用分层架构: ``` src/updater/ ├── domain/ # Core models and repository protocols ├── application/ # Use cases and business logic ├── infrastructure/ # MongoDB, browser, CSV, and external source adapters ├── presentation/ │ └── discord_bot/ # Discord bot, slash commands, config, formatting └── cli/ # CLI entry points for firmware/vendor tools ``` ### 领域层 领域层定义了核心数据模型和 repository 接口: - `Target` — bot 追踪的产品或设备。 - `Vulnerability` — CVE/ZDI 公告数据。 - `TargetVulnerability` — 目标与漏洞之间的关联。 - `VendorConfig` — 供应商的固件查找设置,包括 URL 模板、HTML 元素 ID 和 regex。 ### 应用层 应用层包含用例: - 从已配置的来源同步漏洞。 - 目标 CSV 导入。 - JSON 导出。 - 使用目标供应商元数据和供应商固件配置进行固件查找。 ### 基础设施层 基础设施层实现了外部 adapter: - 用于目标、漏洞、链接、版本和供应商配置的 MongoDB repository。 - NVD 和 ZDI 漏洞来源。 - CSV 目标加载器。 - 使用 Playwright 进行固件页面抓取的浏览器 adapter。 ### 表现层 表现层通过 Discord slash command 和 CLI 工具公开功能: - 用于目标管理、漏洞同步/搜索、调度、供应商固件配置和固件查找的 Discord bot 命令。 - 用于供应商配置管理和固件查找的 CLI 命令。 ## 安装说明 ### 前置条件 - Python 3.10+ - 在本地或远程运行的 MongoDB - 可访问互联网以进行漏洞同步和固件查找 - 启用了 **Server Members Intent** 的 Discord bot 应用程序 - 安装了用于固件查找的 Playwright Chromium ### 设置 创建并激活虚拟环境: ``` python -m venv .venv . .venv/bin/activate ``` 从 `requirements.txt` 安装运行时依赖项: ``` pip install -r requirements.txt ``` 对于开发,请安装包含开发依赖项的包: ``` pip install -e ".[dev]" ``` 安装用于固件查找的 Playwright 浏览器依赖项: ``` playwright install chromium ``` 复制示例环境文件并填写您的值: ``` cp .env.example .env ``` 所需的环境变量值: ``` DISCORD_TOKEN=... DISCORD_GUILD_ID=... DISCORD_CHANNEL_ID=... DISCORD_ADMIN_ROLE_ID=... SYNC_TIME=09:00 NOTIFY_TIME=09:15 TIMEZONE=UTC+7 MONGODB_URI=mongodb://localhost:27017 MONGODB_DATABASE=pwn2own_updater ``` 运行测试: ``` python -m pytest -q ``` ## 使用说明 ### 启动 Discord bot ``` updater-bot --env .env ``` bot 在启动时会将 slash command 同步到已配置的 Discord guild 中。 ### Discord 命令 目标管理: ``` /list-targets /show-target target_id: /add-target name: aliases: vendor: vendor_alias: category: /remove-target names: /import-targets file: /clear-database confirm:DELETE ``` 漏洞管理: ``` /add-vuln advisory_id: description: cvss_score: severity: references: target_name: /sync-cves target: /search-vulns severity: year: from_date: to_date: ``` 调度: ``` /set-schedule sync_time: notify_time: /show-schedule ``` 供应商固件配置和查找: ``` /set-vendor-firmware vendor: url_template: attr_id: regex: /import-vendor-firmware file: /set-vendor-alias target_id: vendor_alias: /lookup-firmware target_id: url_template: attr_id: regex: ``` 固件查找使用目标的 `vendor` 来查找已保存的供应商固件配置,并使用目标的 `vendor_alias` 来渲染供应商 URL。如果目标没有供应商、没有供应商别名、没有已保存的供应商配置、URL/regex 不匹配,或者不支持固件查找,bot 将不会返回固件信息。 ### 供应商固件 CSV 格式 批量供应商固件导入需要这些列: ``` vendor,url_template,attr_id,regex Canon,https://example.com/{alias}/firmware,downloads,(v[\d.]+).*(https://[^"']+) ``` 规则: - `url_template` 必须使用 HTTPS。 - `url_template` 必须包含 `{alias}`。 - `attr_id` 是要抓取的 HTML 元素 ID。 - `regex` 必须包含至少两个捕获组: - group 1:固件版本 - group 2:固件下载 URL ### CLI 工具 管理已保存的供应商固件配置: ``` vendor-config add \ --vendor Canon \ --url-template 'https://example.com/{alias}/firmware' \ --attr-id downloads \ --regex '(v[\d.]+).*(https://[^"'"']+)' vendor-config list vendor-config remove --vendor Canon ``` 使用已保存的供应商配置查找目标的固件: ``` firmware-lookup --target-id 1 ``` 使用运行时 URL/regex 输入测试固件查找: ``` firmware-lookup \ --target-id 1 \ --url-template 'https://example.com/{alias}/firmware' \ --attr-id downloads \ --regex '(v[\d.]+).*(https://[^"'"']+)' ``` ### 开发 运行完整的测试套件: ``` python -m pytest -q ```
标签:Discord, MongoDB, 固件管理, 机器人, 漏洞追踪, 特征检测, 逆向工具