文章目录
一、前言
1.1 来自官方的介绍
在快速发展的网络安全格局中,2023 年是网络安全威胁大量涌入的一年,国家漏洞数据库 (NVD)报告的新 CVE(常见漏洞和暴露)条目数量达到惊人的 24,804 条。海量的数据可能令人难以承受,但我们最新的创新借助cvemap旨在正面应对这一挑战。在 的支持下cvemap-api
,我们的工具定期从 NVD 和其他关键来源收集 CVE 数据,将它们整合到一个单一的综合存储库中。
这种战略聚合将复杂且不断扩大的 CVE 范围转变为一种易于管理且用户友好的格式。借助cvemap的作用不仅仅是穿越密集的 CVE 数据“丛林”;它充当可靠的指南,为在这个复杂且不断变化的网络安全领域导航提供清晰的地图和指南针。借助cvemap,您不仅可以跟上网络安全发展的步伐,还可以与网络安全的发展保持同步。您将能够自信地驾驭并保持领先地位。
1.2 Github地址和文档地址
# github地址
https://github.com/projectdiscovery/cvemap
# 文档地址
https://blog.projectdiscovery.io/announcing-cvemap-from-projectdiscovery/
https://docs.projectdiscovery.io/tools/cvemap/running#prerequisites-for-cvemap
二、工具搭建与使用
2.1 工具搭建
- 安装Golang编译环境,官方说cvemap 需要Go 1.21才能成功安装,我机器原本有安装有Go,1.19.3我也安装成功了。
- 要安装,只需运行以下命令或从发布页面下载预编译的二进制文件。
go install github.com/projectdiscovery/cvemap/cmd/cvemap@latest
-
需要到获取API密钥,直接用github账号登录就行。
https://cloud.projectdiscovery.io/templates?ref=api_key
-
设置API密钥
# 输入以下命令,然后粘贴API Key即可 ./cvemap -auth
2.2 工具使用
# 常用示例,具体用法可参照官方文档
./cvemap
./cvemap -h1
./cvemap -poc
./cvemap -product confluence
./cvemap -id CVE-2024-0519
./cvemap -json > ./cvemap.json
三、CVEMAP数据导出解析脚本
3.1 CVE导出Json格式
./cvemap -json > ./cvemap.json
3.2 Python解析脚本源码
# @艺说IT
import json
import csv
header = ["漏洞编号", "漏洞描述", "危害等级","漏洞产品","产品所属公司","漏洞类型","披露时间","是否有POC","POC链接"]
# json列表
file_list = ["cvemap.json","h1-cvemap.json","confluence-cvemap.json"]
filename = "cve.csv"
with open(filename, "w", encoding="UTF8") as f:
writer = csv.writer(f)
# 写入头
writer.writerow(header)
for file_name in file_list:
with open(file_name,"r") as file:
# 读取JSON数据
data = json.load(file)
print("条数:",len(data))
for i in range(len(data)):
cve_name = data[i]["cve_id"]
cve_description = str(data[i]["cve_description"]).replace("\n","")
# 风险等级
severity = data[i]["severity"]
# 漏洞发布日期
published_at = data[i]["published_at"]
# 漏洞点
if "weaknesses" in data[i]:
weaknesses = str(data[i]["weaknesses"])
else:
weaknesses = "无"
# poc
if "poc" in data[i]:
if len(data[i]["poc"]) > 0:
poc = str(data[i]["poc"])
is_poc = "有"
else:
is_poc = "无"
else:
is_poc = "无"
poc = "无"
if "cpe" in data[i]:
# 漏洞产品
product = str(data[i]["cpe"]["product"])
# 产品所属公司
vendor = str(data[i]["cpe"]["vendor"])
else:
# 漏洞产品
product = "无"
# 产品所属公司
vendor = "无"
# ["漏洞编号", "漏洞描述", "危害等级","漏洞产品","产品所属公司","漏洞类型","披露时间","是否有POC","POC链接"]
time_ip_args_rule = cve_name + " #### " + cve_description + " #### " + severity + " #### " + product + " #### " +vendor + " #### " + weaknesses + " #### " + published_at + " #### " + is_poc + " #### " + poc
new_data = [str(time_ip_args_rule).split(" #### ")]
print(new_data)
# 打开 CSV 文件,以追加模式写入数据
with open(filename, "a", newline="") as file:
writer = csv.writer(file)
writer.writerows(new_data)
四、总结
之前就有想法收集漏洞列表,形成自己的漏洞库,方便以后的查找、复盘、集合工具……,所以这个工具提供了很大的便利,非常不错。微信公众号搜索关注艺说IT,分享各种原创技术干货文章,对你有用的话请一键三连,感谢🙏。