01
写在前边
I Doc View在线文档预览是一款在线文档预览系统,可以实现文档的预览及文档协作编辑功能。其存在代码执行漏洞,使得攻击者可以通过利用这个接口,触发服务器下载并解析恶意文件,从而导致远程命令执行漏洞。进而控制服务器上的进程和文件。
02
漏洞分析
漏洞位置在
com.idocv.docview.controller.HtmlController#toWord
*左右滑动查看更多
首先根据输入的URL地址,计算出其MD5值,然后创建相应的目录和文件。
目录命名是data/urlhtml/计算出的md5,创建的结构是:
- data
- urlhtml
- <md5(URL地址)>
- index.html
- <md5(URL地址)>.docx
如果经过MD5计算后的目标HTML文件不存在,则通过GrabWebPageUtil工具类的downloadHtml()方法。
跟进downloadHtml方法。
从指定的URL地址下载HTML页面,并将其保存到文件中, 如果该HTML文件包含其他链接,则递归下载这些链接对应的文件。
看下getWebPage里的实现。
首先从URL中获取文件名。通过调用obj.getPath()方法获取URL的路径,截取最后一个/后的字符串作为文件名。
如果从URL中获取到的文件名为空,则将文件名设为default.html。
接下来判断传入的文件名是否为空或空白字符串。如果传入的文件名不为空则将其设为实际文件名。
最后,根据输出目录和文件名创建新文件。
这里虽然有个黑名单,但是没有jsp,不影响。
if (!filename.endsWith("html") && !filename.endsWith("htm") && !filename.endsWith("asp") && !filename.endsWith("aspx") && !filename.endsWith("php") && !filename.endsWith("php") && !filename.endsWith("net")) {
try {
fop = new FileOutputStream(outputFile);
is = conn.getInputStream();
byte[] buffer = new byte[16384];
int length;
while((length = is.read(buffer)) > 0) {
fop.write(buffer, 0, length);
}
fop.flush();
} catch (IOException var29) {
var29.printStackTrace();
}
return;
}
*左右滑动查看更多
也就是需要传入的文件名为空,url为下载的链接就可以了。
回去看downloadHtml中调用getWebPage的地方,一共有两处。
在第二处,也就是for循环中调用getWebPage没有传入文件名,接下来就是看怎么走进for循环。
当linksToGrabSize不为0也就是说html中包含其他文件链接时,就会依次调用getWebPage下载文件。
看下GrabUtility类这个linksToGrabSize怎么来的。
在searchForNewFilesToGrab中解析HTML页面中包含的链接,提取出所有类型为link、script和img的元素,并获取其href或src属性(即对应的文件链接),然后调用addLinkToFrontier将其添加到文件链接列表GrabUtility.filesToGrab中。
而这个searchForNewFilesToGrab是在getWebPage中调用的。
所以在downloadHtml中第一次调用getWebPage时传入的url需为一个html页面切包含其他下载链接。
至此总结下来就是,需要构造一个含有需要下载的webshell链接的html页面,然后传入url就可以了,由于是windows安装的所以文件名设置为....夸目录就可以了。
|
03
漏洞复现
构造html页面,放好要下载的文件。
python起一个http服务。
|
记得穿一次之后换一个url链接再穿下一个。
04
修复建议
1、目前官方已发布安全修复版本,受影响用户可以自行更新或者联系相关技术支持获取最新版本或补丁修复漏洞。
https://api.idocv.com
2、在WAF(Web 应用防火墙)侧拦截受影响接口的请求,可以通过配置规则集或过滤规则,识别并拦截尝试利用该接口漏洞的恶意请求。
3、关闭该系统对外开放,配置防火墙规则,仅允许来自受信任网络的流量访问系统。通过限制源 IP 地址范围,降低系统面临的潜在攻击面。
4、定期对iDoc View的代码进行审计,以查找潜在的漏洞和安全问题。可以使用静态代码分析工具或进行代码审查来加强安全性。
往期回顾
原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| I Doc View /html/2word 文件上传漏洞分析和缓解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论