创建基于PHP的应用,通过CVE-ID从GitHub查找POC/漏洞利用程序
2021年4月9日,我创建了一个名为git-cve的基于命令行的Python3应用程序,它可以为指定的CVE-ID搜索漏洞利用程序/概念验证代码。但我对此并不满意,因为它不够稳定。我考虑创建一个类似但基于Web图形界面的工具。我看到了来自vulners的一篇帖子,他们发布了一个新的机器人,用于查找CVE-ID的POC/漏洞利用程序。
来源:Vulners Facebook 页面
所以我想,让我们也创建一个类似的东西,但仅使用PHP且无需任何成本。在创建我的Git-CVEPython脚本时,我发现了一个GitHub仓库,它自动收集CVE ID的POC/漏洞利用程序,有趣的是,这些收集到的信息都以JSON格式存储。这对我来说是一个加分项。
GitHub 仓库
GitHub - nomi-sec/PoC-in-GitHub
因此,我考虑将这个仓库用作我应用程序的API,因为它是开源的并且经常更新。那么,让我们开始编写代码。
通过点击“raw”,我们可以查看此页面的原始格式,URL看起来像这样:https://raw.githubusercontent.com/nomi-sec/PoC-in-GitHub/master/2021/CVE-2021-21975.json
如果我更改/2021和/CVE-2021-21975的值,它将显示指定CVE编号的结果。我们将保持其他内容不变,只将这两个值替换为用户输入,.json保持不变。我们不需要从用户那里获取两个输入,因为CVE-ID包含了其发布的年份。
所以,首先让我们使用PHP获取用户输入。我们可以通过HTML表单或使用参数来实现。在本例中,我将使用GET方法和URL参数来获取用户输入。
让我们创建一个名为cve_id的变量,并将用户输入存储在其中。它将通过名为id的URL参数获取用户输入,并将其存储到cve_id变量中。
示例https://url.tld/cve.php?id=CVE-2020-1234
获取用户输入后,我们的第一步是清理用户输入,因为我们不希望其恶意负载在我们的网页中执行。我们不打算创建另一个变量来存储清理后的输入,而是直接使用htmlentities()从其源头清理用户输入。
现在,我们的首要任务是从这个CVE ID中分割出年份,因为我们需要年份来获取CVE-ID的POC/漏洞利用信息。PHP有一个名为explode的函数,它可以帮助使用特殊字符分隔文本。我们的CVE ID包含一个分隔cve-year-id的特殊字符。我们将使用(-)和explode函数来分割年份。分割后,我们将得到3个值:0、1、2。0是CVE,1是YEAR,2是ID。现在让我们分割它。
在上面的代码中,首先我创建了一个名为spl的变量来存储所有分割后的数组,然后,我将数组编号1存储到名为year的变量中。现在我们的任务是调用那个GitHub仓库,以获取关于用户CVE ID的POC的所有信息。
请求URL将以JSON格式响应我们,现在我们必须处理JSON以提取关于CVE-ID的确切信息。PHP内置了一个名为json_decode的函数来解码JSON并提取信息,我们将使用这个json_decode来解码响应。首先让我们看看JSON包含什么。
它包含id、仓库名称、html_url、创建日期等。我们不需要所有这些。我们只提取这个POC的URL和作者名称。如果需要,您可以扩展它,但出于文章目的,我只提取作者的用户名和POC链接。首先,让我们使用PHP函数file_get_contents和json_decode从URL获取JSON并提取其内容。让我们开始吧。
我们的框架现在已经准备好了,让我们将这些数据提取到我们的客户端页面。
输出将类似于下图。
源代码:
我的项目:https://git-cve.system00-sec.com/
感谢您的阅读。我的主要动机是从旧事物中创造新事物并使它们开源,我并不想取笑他人或在经济上伤害他人,本文只是解释了我如何创建我的项目,仅此而已。
CSD0tFqvECLokhw9aBeRquC3oGLY3Hy/RSVByZf07xCye9yyF8xWYomSZASCxc0RUXVhyF8CC+N/LJEJJQDkE7Uxyy4CIErqFLDnJWdLQ2l5HPWwQtn/yYw2C9E0EWMovZsPQAblzWomQn5u0fo3kA==
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)