最近需要开发一个插件:首先需要识别初nginx的版本号,其次需要列出该版本号存在的CVE漏洞列表。
1 识别nginx版本号
首先识别nginx的版本号,我们知道nginx错误页会暴露该版本号,因此我们只需要解析response报文,利用正则表达式匹配出版本号即可。
(1)获取Response报文
String response = new String(messageInfo.getResponse());
(2)定义识别nginx的正则表达式为nginx/\d+(\.\d+){2}+然后进行正则匹配,获得nginx版本号
String nginxRegex = "nginx/\\d+(\\.\\d+){2}+";
Pattern p = Pattern.compile(RegexStr);
// 现在创建 matcher 对象
String detectVersion="";
Matcher m = p.matcher(response);
while (m.find()) {
detectVersion = m.group().substring(6);//得到nginx版本
}
将上述代码编译成jar文件,加载到burpsuite上,运行如下:识别nginx成功。
2 检索该版本对应的CVE漏洞
检索对应版本存在的CVE漏洞其实有很多的网站:
例如下面几个网站 但是大多数的网站 该搜索功能结果都没有很准确
https://snyk.io/vuln/npm:lodash@4.17.15 结果准确
https://vuldb.com/zh/?search.advanced#results 结果相对准确 但是不全 有遗漏
burpsuite
识别nginx版本并索引已经知道的CVE漏洞:
搜索已经知道的CVE漏洞:
1 爬虫:爬取vul,cve网站上的CVE信息:网站设置防爬
2 匹配:正则匹配?机器学习去匹配
调研:bp的插件:Software Vulnerability Scanner利用vulner.comAPI进行扫描探测
初步思路:
第一种API接口使用:
问题:python有对应的库但是存在burpsuite加载不成功的问题,但是java无,只能通过APi访问,但是 搜索不准确,
获取API获取Vulners API密钥
请在Vulners网站上注册。通过单击右上角的名称进入个人菜单。遵循“ API KEYS”标签。生成范围为“ api”的API密钥,并将其与库一起使用。
API Key - 7CX5RVZEMZ6M5RGRI3GPJ6IEJO0ZSV6JLZ7SHO022C1ZJ7XIB32EJIB0NI47ICFK
Created - 2021-05-27T05:10:27
License Type - free
Scope
api
IP List
报错:
但是直接在py运行是OK的
第三种
https://github.com/vulnersCom/api
先安装该库
pip install -U vulners
get-vulner-cve.py
from flask import Flask, request, jsonify
import vulners
app = Flask(__name__)
@app.route("/getcvelist", methods=["POST"])
def getcvelist():
API_KEY="7CX5RVZEMZ6M5RGRI3GPJ6IEJO0ZSV6JLZ7SHO022C1ZJ7XIB32EJIB0NI47ICFK"
vulners_api = vulners.Vulners(api_key=API_KEY)
json_data = request.json
software=json_data["software"]
version=json_data["version"]
# return software+version
sw_results = vulners_api.softwareVulnerabilities(software, version)
sw_vulnerabilities_list = [sw_results.get(key) for key in sw_results if key in ['NVD']]
return jsonify(res=sw_vulnerabilities_list)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
nohup python3 get-vulner-cve.py &
API用法参考:https://github.com/vulnersCom/api/blob/master/samples/software_scanner.py
第二种API使用
API: 8ddd49c11f021f3e3b6f192c54a9f794
但是每天只有50次积分 并且搜索不全面
pass
app-portal:
dev-portal: