这是运行在 https://patchchecker.com 上的服务的代码库。 简而言之,PatchChecker 是一个 Web 应用程序(基于 Flask 运行),提供与 Watson 类似的输出。然而,使用 PatchChecker 无需在目标机器上执行二进制文件。 该项目还包含一个网络爬虫,它会利用 Microsoft 网站上的信息自动更新 PatchChecker 的数据库,从而提供一种更可扩展且更易用的解决方案,用于查找 Windows 系统已(或未)修补的 CVE。 此外,任何其他 CVE 都可以添加到数据收集器的输入中,只要它们在 https://portal.msrc.microsoft.com 上有条目即可进行检查。你也可以使用这些数据来更新 Watson。
关于该项目的更多信息,请点击此处查看。
要使用 PatchChecker,你可以直接访问公开的网站 patchchecker.com,或者通过 git clone 本仓库,安装所需的库,确保 patches.db 与 app.py 在同一目录下,然后使用 python3 ./app.py 启动应用程序。
应用程序启动后,你可以在浏览器中打开随附的 "index.html" 文件来实际使用该服务,并获取被测系统存在漏洞的补丁列表。




或者,你可以使用 curl 命令进行类似操作: 请求: 注意:你可以使用任何你希望的分隔符,这里我用的是空格:
curl 'https://patchchecker.com/checkprivs/' --data-raw 'wmicinfo=KB1231411 KB1231441 KB1234141&build_num=17763'
响应: 注意:使用了一些假 KB,因此显示对所有漏洞都易受攻击,即我未安装任何补丁 注意:输出已截断
{
"total_vuln": 9,
"kbs_parsed": [
"KB1231411",
"KB1231441",
"KB1234141"
],
"total_kbs_parsed": 3,
"build": "17763",
"results": [
{
"refs": [
"https://exploit-db.com/exploits/46718",
"https://decoder.cloud/2019/04/29/combinig-luafv-postluafvpostreadwrite-race-condition-pe-with-diaghub-collector-exploit-from-standard-user-to-system/"
],
"name": "CVE-2019-0836",
"vulnerable": true
}
]
}
要自行运行此仓库中的代码,别忘了执行:python3 -m pip install -r requirements.txt 并使用 python3 运行。参考信息:我使用的是 Python 3.7.3。
patchdata_collector.py 脚本是一个基于 pyppeteer 的爬虫,它会遍历多个 Microsoft 网站,获取 --cve-list 参数文件中指定的 CVE 所需的数据。
格式示例请参见 samples 目录中的 cves.txt 文件。基本上,它是一个按行分隔的文件,每行包含以下内容:CVE-XXXX-XXXX|https://website.com/resource-pertaining-to-CVE,http://second_resource.com,你应该明白这个意思。结果输出的示例可以在附带的 patches.db 文件中找到。
代码并不完美,但目前能正常工作并获取数据。参考信息是,对于 9 个 CVE,大约需要 11 分钟完成,具体时间可能因机器而异。
usage: patchdata_collector.py [-h] --cve-list CVE_LIST [--db DB] [--new-db] [-v]
[-vv] [--no-headless] [--json JSON]
optional arguments:
-h, --help 显示此帮助信息并退出
--cve-list CVE_LIST 行和管道分隔的列表,包含 CVE 及相关的 URL 及信息,示例:CVE-2020-1048|https://github.com/ionescu007/faxhell,https://github.com/ionescu007/PrintDemon
--db DB sqlite 数据库文件名
--new-db 删除旧数据库(如果存在)
-v 设置输出为调试级别(详细)
-vv 设置输出为烦人级别
--no-headless 以非无头模式运行浏览器
--json JSON JSON 格式输出,参数应为 JSON 文件名
运行 time ./patchdata_collector.py --cve-list cves.txt --db antest.db --new-db 会产生以下输出:
2020-06-05 20:38:49.292 | INFO | __main__:main:181 - 已加载 10 个 CVE
2020-06-05 20:38:49.430 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-0836 的 KB
2020-06-05 20:40:27.183 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1064 的 KB
2020-06-05 20:41:07.158 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-0841 的 KB
2020-06-05 20:41:31.675 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1130 的 KB
2020-06-05 20:42:58.527 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1253 的 KB
2020-06-05 20:43:25.069 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1315 的 KB
2020-06-05 20:44:57.974 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1385 的 KB
2020-06-05 20:45:22.026 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1388 的 KB
2020-06-05 20:46:48.407 | INFO | __main__:parsekb:33 - 正在解析 CVE-2019-1405 的 KB
2020-06-05 20:48:07.026 | INFO | __main__:parsekb:33 - 正在解析 CVE-2020-1048 的 KB
完成
real 11m27.793s
user 1m21.632s
sys 0m14.559s