LOADING

正在加载

如何追踪通用型漏洞

壹 介绍

首先我们要确认什么是通用性漏洞?什么是事件性漏洞?

  • 通用型漏洞是指一类软件或设备都具有的漏洞。
  • 事件型漏洞是指某一个具体网站或应用的漏洞,需要主动针对网站或应用进行。

说白了,通用型漏洞更普遍,而且很多都是开源的框架或者软件,而事件型漏洞比较单一只针对个别网站,是该网站特有的漏洞。

贰 思路

那我们如何追踪通用型漏洞呢?首先我们需要从网站或者公众号中,找到自己想要追踪的通用型漏洞,然后就会有一些有poc的,一些没有poc的,有poc的很简单就可以复现和分析,这里我们就不具体说了,而没有poc的就需要我们根据其文章的复现的图片,内容进行分析,然后找到框架或者软件对应的源码,这时候我们可用通过开发者对该框架或者软件的更新说明,进行代码对比,从而得到修改的点,然后进行代码审计分析,最后构造poc

叁 以CVE-2023-28432漏洞为例

3.1 简单分析漏洞情况

我们以前几天刚出现的CVE-2023-28432漏洞为例子进行追踪,我们以赛博昆仑CERT【复现】MinIO信息泄露漏洞(CVE-2023-28432)风险通告为出发点分析。

首先我们大致了解一下这篇文章的排版:

  • 最前面都是该漏洞的基础说明,如漏洞编号、漏洞形式、漏洞名称、漏洞影响版本等,所以通常情况下一个漏洞的说明或者复现。
    7069143244f23dba540ad87cfc92fd89.png
  • 然后就是漏洞的复现,这里包括了漏洞的复现和poc,现在我们看到的这篇文章是没有poc的,只有复现截图。
    845b1177348759ae001bdd7131d93f4e.png
  • 接着就是一些修复建议、参考链接和各大安全厂商组织团队的广告。
    a9f208da17938609293f7f97841e674c.png

我们主要关注的是漏洞复现部分,从漏洞复现图片中,我们可以很清楚的了解到,该漏洞是一个POST请求,然后没有body内容,并且响应的内容是一堆接口泄露,可以联想到是一个未授权漏洞和信息泄露漏洞这两个大类,在接着看请求头没有什么特殊的poc,说明漏洞主要是接口导致的。
6e38652cfacb7331fa7b245e84dfcd26.png
接着我们可以通过CVE官网去查看该漏洞的详细和参考。
20707cda2a298f00e8c3167c372d478d.png
进入Search CVE List搜索列表,搜索漏洞CVE-2023-28432
28f74cb07776a25d6f170452d26ec562.png
5ea0a2ee386bca759e6c47df11d36d7c.png
58af227947df0242314dc5af0e69f8c9.png
根据参考链接,我们可以很明显的看到该漏洞是在github上开源的系统,该系统的官网链接为:minio
当然我们也可以直接去github上找该系统,要找这种开源的系统,都是选择星数最多的项目:
0993623c1759e04fc38cfca7a6303c49.png
接着我们可以通过参考链接,大致了解到该漏洞出现的版本以及位置:
b45466a59eb9db6ba7ee0e7ea87277f6.png
20c514dabe9c0fbe7d4fc7f7477fff7a.png
当然我们也可以通过Security Advisories查看:
3770962f2507c3e52a96ea6ce03cfbbd.png
进入到安全日志里,我们可以清楚的了解到,该框架是用golang写的,并且漏洞出现的地方是因为会将系统的MINIO环境变量返回到了cfg中,并使用logger.LogIf记录日志,可以看到没有做什么限制。
082717a1437866a006550f623e5053d5.png
我们可以通过Patches获取请求结点#16853,定位到修复后的源码处,发现添加了一个哈希和鉴权:
c9cada2d55b02eef0010b0268cdf73ea.png
69102a270af850b1110a7ace56570265.png
a1afb274ea15f563e5c1f9ef80586324.png
大致漏洞情况已经了解了,我们将源码下载下来,进行进一步分析,注意这里下载的源码一定是在该漏洞修复前的源码:这里我们可以根据Security Advisories查看修改前后的版本号:
757162f9bb51806d02aa99b31d3afc8b.png
我们到code去获取未修复的源代码,只要比修复该漏洞之前的源代码就可以了,这里我们下载了RELEASE.2023-03-13T19-46-17Z
fb313defb5b54571d46aa063ef3ed60b.png

3.2 代码审计

根据前面安全厂商发布的漏洞公告,我们可以看到是通过接口路由触发的未授权漏洞,所以我们直接跳转到关键函数getServerSystemCfg中:
1d7eaad322ba72eabdc574ee875793ec.png
回溯谁调用了函数:
12d5b72c75c4e8d01e9d5ef045506dbb.png
首先我们大概分析发现第一个搜索到的函数是出现该漏洞的关键(其实在搜索和查找关键点时是很漫长的一个过程),可以发现有一个路由,有两个子路由,其中上面的路由调用的是空的方法,只有下面才是正确的漏洞回溯路径,而且用的也是Post请求,地址是bootstrapRESTVersionPrefix + bootstrapRESTMethodVerify,调用了函数server.VerifyHandler
27a855e61a08bea52979c81f13bab939.png
查找bootstrapRESTMethodVerify的路由,得到/verify
7c391dbbf9d4f23b1fb409c431805725.png
查找bootstrapRESTVersionPrefix,得到/v1
63e998aad4abec5893f3a3bd103f8b83.png
拼接后得到/v1/verify,由于是子路由,我们需要找主路由,得到bootstrapRESTPrefix的路由是/minio/bootstrap
6c1102d94b21755d832bdd00c242f8a4.png
拼接后得到/minio/bootstrap/v1/verify,接着继续回溯,发现没有上一级路由了,加上也没有其他body构造,所以我们直接构造poc

/minio/bootstrap/v1/verify

3.3 复现

通过fofa等搜索引擎,查找在线的环境:
6fe3707e04fc5375cc8659a512e1211d.png

肆 小结

对于一个通用型漏洞追踪的思路就是通过安全厂家或者安全组织发布的公告,获取基本信息,然后通过互联网查找该漏洞框架或者已经公开的poc,进行分析和代码审计,获得最后的poc,最后通过fofa的搜索引擎找现有的环境复现。

avatar
小C&天天

修学储能 先博后渊


今日诗句