IDocView 前台RCE漏洞分析
字数 1719 2025-08-20 18:18:16
IDocView 前台RCE漏洞分析与利用
0X00 漏洞概述
IDocView是一款提供多种文件预览功能的Web应用,包括:
- 在线文档预览
- 压缩文件预览
- 图纸预览
- 图片预览
- 音视频播放
- 协作编辑
- 同步展示
该应用的html/2word接口存在远程代码执行漏洞(RCE),攻击者可以利用此漏洞在服务器上写入任意文件,包括JSP Webshell,从而获取服务器控制权。
0X01 漏洞验证
攻击准备
-
在VPS上创建恶意文件:
- 创建包含Webshell的JSP文件,路径需要特殊构造:
..\..\..\docview\1.jsp - 注意:
- VPS需为Linux系统
- Linux创建文件时需要转义反斜杠或使用单引号包裹:
touch ..\\..\\..\\docview\\1.jsp 或 touch '../.../../docview/1.jsp' - 文件名以
.开头,默认是隐藏文件,查看时需使用:ls -al
- 创建包含Webshell的JSP文件,路径需要特殊构造:
-
创建HTML诱导文件:
- 在VPS上创建任意HTML文件
- 在HTML中引入刚创建的JSP文件
-
开启Web服务:
- 启动HTTP服务使文件可被访问
漏洞利用
-
让受害机访问特定URL:
/html/2word?url=<你的HTML文件URL> -
成功后访问写入的Webshell:
/1.jsp
0X02 漏洞分析
漏洞定位
漏洞位于html/2word控制器中,主要流程如下:
- 创建
urlhtml目录 - 根据URL计算唯一标识作为文件名
- 检查该文件名下
index.html是否存在- 如果不存在(!isFile()为真),则进入
GrabWebPageUtil.downloadHtml(url, htmlDir)
- 如果不存在(!isFile()为真),则进入
- 使用外部命令将
index.html转换为Word文档 - 设置响应Content-Type为Word文档类型
- 将生成的Word文档发送给客户端
关键方法分析:downloadHtml
方法执行流程:
-
参数检查(69-74行):
- 检查URL和文件目录是否为空
- 检查URL是否以
http开头
-
URL处理(76行):
- 创建URL对象
-
目录检查(77-83行):
- 检查文件目录是否存在
- 检查文件目录是否为文件
-
进入getWebPage方法(84行)
getWebPage方法分析
-
建立连接(138-156行):
- 常规HTTP连接建立
-
状态码检查(155-176行):
- 建立URL连接并检查状态码
-
重定向处理(180-196行):
- 如果发生跳转,建立新的连接
-
文件操作(199-206行):
- 检查文件是否存在,不存在则创建
- 检查文件是否可写(203行)
-
内容类型判断(209-222行):
- 判断文件后缀是否为
html, htm, asp, aspx, php, net - 如果是,获取URL连接的输入流,按行读取并转换为字符串
htmlContent
- 判断文件后缀是否为
-
关键漏洞点 - searchForNewFilesToGrab(224行):
- 从
htmlContent中提取link、href、src等链接 - 通过
_addLinkToFrontier_(urlToGrab, fromHTMLPageUrl)将链接加入filesToGrab集合 - 最终
htmlContent被写入文件
- 从
漏洞触发原理
-
文件写入分支:
- 当文件后缀不在限制列表(html, htm, asp, aspx, php, net)中时
- 直接通过else分支写入文件
- JSP后缀正好不在限制列表中
-
路径穿越:
- 文件名从URL最后一个
/开始截取 - 如果包含
/则命名为default.html - 在Windows系统上可构造
....\1.txt这样的文件名 - 导致任意文件写入和路径穿越
- 文件名从URL最后一个
0X03 漏洞总结
漏洞成因
- 未对文件后缀进行严格过滤,允许写入JSP等动态脚本文件
- 未对文件名进行规范化处理,导致路径穿越
- 自动下载和保存链接资源的功能缺乏安全限制
修复建议
- 严格限制可下载和保存的文件类型
- 对文件名进行规范化处理,防止路径穿越
- 对写入目录进行权限限制
- 对用户输入进行严格过滤和验证
学习要点
- 文件下载功能的安全实现
- 路径规范化处理的重要性
- Web应用对用户提供内容的处理风险
- Windows与Linux路径处理的差异
该漏洞展示了Web应用中文件处理功能的常见安全问题,特别是在自动下载和保存远程资源时的风险。开发时应特别注意此类功能的实现方式。