IDocView 前台RCE漏洞分析
字数 1719 2025-08-20 18:18:16

IDocView 前台RCE漏洞分析与利用

0X00 漏洞概述

IDocView是一款提供多种文件预览功能的Web应用,包括:

  • 在线文档预览
  • 压缩文件预览
  • 图纸预览
  • 图片预览
  • 音视频播放
  • 协作编辑
  • 同步展示

该应用的html/2word接口存在远程代码执行漏洞(RCE),攻击者可以利用此漏洞在服务器上写入任意文件,包括JSP Webshell,从而获取服务器控制权。

0X01 漏洞验证

攻击准备

  1. 在VPS上创建恶意文件

    • 创建包含Webshell的JSP文件,路径需要特殊构造:
      ..\..\..\docview\1.jsp
      
    • 注意:
      • VPS需为Linux系统
      • Linux创建文件时需要转义反斜杠或使用单引号包裹:
        touch ..\\..\\..\\docview\\1.jsp
        touch '../.../../docview/1.jsp'
        
      • 文件名以.开头,默认是隐藏文件,查看时需使用:
        ls -al
        
  2. 创建HTML诱导文件

    • 在VPS上创建任意HTML文件
    • 在HTML中引入刚创建的JSP文件
  3. 开启Web服务

    • 启动HTTP服务使文件可被访问

漏洞利用

  1. 让受害机访问特定URL:

    /html/2word?url=<你的HTML文件URL>
    
  2. 成功后访问写入的Webshell:

    /1.jsp
    

0X02 漏洞分析

漏洞定位

漏洞位于html/2word控制器中,主要流程如下:

  1. 创建urlhtml目录
  2. 根据URL计算唯一标识作为文件名
  3. 检查该文件名下index.html是否存在
    • 如果不存在(!isFile()为真),则进入GrabWebPageUtil.downloadHtml(url, htmlDir)
  4. 使用外部命令将index.html转换为Word文档
  5. 设置响应Content-Type为Word文档类型
  6. 将生成的Word文档发送给客户端

关键方法分析:downloadHtml

方法执行流程:

  1. 参数检查(69-74行):

    • 检查URL和文件目录是否为空
    • 检查URL是否以http开头
  2. URL处理(76行):

    • 创建URL对象
  3. 目录检查(77-83行):

    • 检查文件目录是否存在
    • 检查文件目录是否为文件
  4. 进入getWebPage方法(84行)

getWebPage方法分析

  1. 建立连接(138-156行):

    • 常规HTTP连接建立
  2. 状态码检查(155-176行):

    • 建立URL连接并检查状态码
  3. 重定向处理(180-196行):

    • 如果发生跳转,建立新的连接
  4. 文件操作(199-206行):

    • 检查文件是否存在,不存在则创建
    • 检查文件是否可写(203行)
  5. 内容类型判断(209-222行):

    • 判断文件后缀是否为html, htm, asp, aspx, php, net
    • 如果是,获取URL连接的输入流,按行读取并转换为字符串htmlContent
  6. 关键漏洞点 - searchForNewFilesToGrab(224行):

    • htmlContent中提取linkhrefsrc等链接
    • 通过_addLinkToFrontier_(urlToGrab, fromHTMLPageUrl)将链接加入filesToGrab集合
    • 最终htmlContent被写入文件

漏洞触发原理

  1. 文件写入分支

    • 当文件后缀不在限制列表(html, htm, asp, aspx, php, net)中时
    • 直接通过else分支写入文件
    • JSP后缀正好不在限制列表中
  2. 路径穿越

    • 文件名从URL最后一个/开始截取
    • 如果包含/则命名为default.html
    • 在Windows系统上可构造....\1.txt这样的文件名
    • 导致任意文件写入和路径穿越

0X03 漏洞总结

漏洞成因

  1. 未对文件后缀进行严格过滤,允许写入JSP等动态脚本文件
  2. 未对文件名进行规范化处理,导致路径穿越
  3. 自动下载和保存链接资源的功能缺乏安全限制

修复建议

  1. 严格限制可下载和保存的文件类型
  2. 对文件名进行规范化处理,防止路径穿越
  3. 对写入目录进行权限限制
  4. 对用户输入进行严格过滤和验证

学习要点

  1. 文件下载功能的安全实现
  2. 路径规范化处理的重要性
  3. Web应用对用户提供内容的处理风险
  4. Windows与Linux路径处理的差异

该漏洞展示了Web应用中文件处理功能的常见安全问题,特别是在自动下载和保存远程资源时的风险。开发时应特别注意此类功能的实现方式。

IDocView 前台RCE漏洞分析与利用 0X00 漏洞概述 IDocView是一款提供多种文件预览功能的Web应用,包括: 在线文档预览 压缩文件预览 图纸预览 图片预览 音视频播放 协作编辑 同步展示 该应用的 html/2word 接口存在远程代码执行漏洞(RCE),攻击者可以利用此漏洞在服务器上写入任意文件,包括JSP Webshell,从而获取服务器控制权。 0X01 漏洞验证 攻击准备 在VPS上创建恶意文件 : 创建包含Webshell的JSP文件,路径需要特殊构造: 注意: VPS需为Linux系统 Linux创建文件时需要转义反斜杠或使用单引号包裹: 文件名以 . 开头,默认是隐藏文件,查看时需使用: 创建HTML诱导文件 : 在VPS上创建任意HTML文件 在HTML中引入刚创建的JSP文件 开启Web服务 : 启动HTTP服务使文件可被访问 漏洞利用 让受害机访问特定URL: 成功后访问写入的Webshell: 0X02 漏洞分析 漏洞定位 漏洞位于 html/2word 控制器中,主要流程如下: 创建 urlhtml 目录 根据URL计算唯一标识作为文件名 检查该文件名下 index.html 是否存在 如果不存在(!isFile()为真),则进入 GrabWebPageUtil.downloadHtml(url, htmlDir) 使用外部命令将 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 这样的文件名 导致任意文件写入和路径穿越 0X03 漏洞总结 漏洞成因 未对文件后缀进行严格过滤,允许写入JSP等动态脚本文件 未对文件名进行规范化处理,导致路径穿越 自动下载和保存链接资源的功能缺乏安全限制 修复建议 严格限制可下载和保存的文件类型 对文件名进行规范化处理,防止路径穿越 对写入目录进行权限限制 对用户输入进行严格过滤和验证 学习要点 文件下载功能的安全实现 路径规范化处理的重要性 Web应用对用户提供内容的处理风险 Windows与Linux路径处理的差异 该漏洞展示了Web应用中文件处理功能的常见安全问题,特别是在自动下载和保存远程资源时的风险。开发时应特别注意此类功能的实现方式。