iDocView

前言

练习挖掘1day。漏洞通报:

漏洞通告 | I Doc View在线文档预览系统远程代码执行漏洞

【已复现】I Doc View在线文档预览系统代码执行漏洞(QVD-2023-45061)安全风险通告

代码审计

controller很少,一个一个看很快发现一个问题的控制器

image-20231122213334587

HtmlController.java,提供url参数,然后调用 GrabWebPageUtil.downloadHtml 其中参数 url可控,htmlDir不可控

image-20231122213507490

跟进,GrabWebPageUtil.getWebPage 很明显是重点,传入了URL对象,传参情况:(可控,不可控,’index.html’)

仔细分析GrabWebPageUtil.getWebPage 函数,如果第三个参数不可控,那么将来写入的文件名就不可控,所以这里如果为空或可控,就有可能远程获取文件内容后,写入的文件后缀改为.jsp。可惜这里不可控,强制修改filename为index.html。

image-20231122214202929

如果filename后缀如图示,通过远程获取文件内容后写入到index.html。其中调用了 GrabUtility.searchForNewFilesToGrab 根据函数名与入参,有没有可能存在比如解析漏洞?所以跟进。

image-20231122214606968

如果filename不是上面所示,最后写入的文件名由outFile控制

image-20231122220308558

outFile完全可控,这里就可以利用目录穿越,拼接后就能将shell文件写入到web目录

image-20231122220427293

GrabUtility.searchForNewFilesToGrab 按照html进行解析,提取其中的元素属性,这里有link[href] 、script[src]、img[src],这里面提取的一定也是某个url或者资源地址,所以接着看 addLinkToFrontier

image-20231122214906572

看代码这里引入了一个重要变量filesToGrab,是个数组,简单来说把src,href中的url放到数组中。

image-20231122215222060

然后就是返回返回返回到 GrabWebPageUtil.downloadHtml ,在遍历时,再次调用getWebPage去获取文件,而且这次第三个参数为空,文件后缀完全可控了。

image-20231122215717245

poc构造

流程:携带恶意link[href]的html -> 远程获取 -> 解析出href -> 远程获取恶意文件

poc.html

<!DOCTYPE html>
<html lang="en">
<head>
<title>test</title>
</head>
<body>
<link href="/..\..\..\docview\poc.jsp">
</body>
</html>

然后构造 ..\..\..\docview\poc.jsp

image-20231122222533013

OK

image-20231122222555175