iDocView
前言
练习挖掘1day。漏洞通报:
漏洞通告 | I Doc View在线文档预览系统远程代码执行漏洞
【已复现】I Doc View在线文档预览系统代码执行漏洞(QVD-2023-45061)安全风险通告
代码审计
controller很少,一个一个看很快发现一个问题的控制器
HtmlController.java,提供url参数,然后调用 GrabWebPageUtil.downloadHtml
其中参数 url可控,htmlDir不可控
跟进,GrabWebPageUtil.getWebPage
很明显是重点,传入了URL对象,传参情况:(可控,不可控,’index.html’)
仔细分析GrabWebPageUtil.getWebPage
函数,如果第三个参数不可控,那么将来写入的文件名就不可控,所以这里如果为空或可控,就有可能远程获取文件内容后,写入的文件后缀改为.jsp。可惜这里不可控,强制修改filename为index.html。
如果filename后缀如图示,通过远程获取文件内容后写入到index.html。其中调用了 GrabUtility.searchForNewFilesToGrab
根据函数名与入参,有没有可能存在比如解析漏洞?所以跟进。
如果filename不是上面所示,最后写入的文件名由outFile控制
outFile完全可控,这里就可以利用目录穿越,拼接后就能将shell文件写入到web目录
GrabUtility.searchForNewFilesToGrab
按照html进行解析,提取其中的元素属性,这里有link[href] 、script[src]、img[src],这里面提取的一定也是某个url或者资源地址,所以接着看 addLinkToFrontier
看代码这里引入了一个重要变量filesToGrab,是个数组,简单来说把src,href中的url放到数组中。
然后就是返回返回返回到 GrabWebPageUtil.downloadHtml
,在遍历时,再次调用getWebPage去获取文件,而且这次第三个参数为空,文件后缀完全可控了。
poc构造
流程:携带恶意link[href]的html -> 远程获取 -> 解析出href -> 远程获取恶意文件
poc.html
<!DOCTYPE html> |
然后构造 ..\..\..\docview\poc.jsp
OK