开发burpsuite插件-识别nginx版本并列出已知CVE

最近需要开发一个插件:首先需要识别初nginx的版本号,其次需要列出该版本号存在的CVE漏洞列表。

1 识别nginx版本号

首先识别nginx的版本号,我们知道nginx错误页会暴露该版本号,因此我们只需要解析response报文,利用正则表达式匹配出版本号即可。

1624603419556

(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成功。

1621909703111

2 检索该版本对应的CVE漏洞

检索对应版本存在的CVE漏洞其实有很多的网站:

例如下面几个网站 但是大多数的网站 该搜索功能结果都没有很准确

https://snyk.io/vuln/npm:lodash@4.17.15 结果准确

https://vulners.com/search?query=affectedSoftware.name:nginx%20AND%20affectedSoftware.version:%221.17.7%22 结果特别不准确

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访问,但是 搜索不准确,

https://vulners.com/

1622014351054

1622015887598

获取API获取Vulners API密钥

请在Vulners网站上注册。通过单击右上角的名称进入个人菜单。遵循“ API KEYS”标签。生成范围为“ api”的API密钥,并将其与库一起使用。

1622081435003

API Key - 7CX5RVZEMZ6M5RGRI3GPJ6IEJO0ZSV6JLZ7SHO022C1ZJ7XIB32EJIB0NI47ICFK

Created - 2021-05-27T05:10:27

License Type - free

Scope

api

IP List

报错:

1622097162280

但是直接在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使用

https://vuldb.com/zh/?doc.api

API: 8ddd49c11f021f3e3b6f192c54a9f794

但是每天只有50次积分 并且搜索不全面

pass

1623219451415

1623220355231

Vulners官方API使用说明

Vulners API使用参考

正则表达式在线测试

正则表达式判断版本号

根据版本号搜索CVE的插件

API解释

app-portal:

1623380555468

dev-portal:

1623380707202

1623380812981

1623380835346

1623380855686

1623380922717

https://portal-ppe1.envisioniot.com/portal/testt

文章目录
  1. 1 识别nginx版本号
  2. 2 检索该版本对应的CVE漏洞
  3. 第一种API接口使用:
  4. 第二种API使用