某国产中间件文件上传漏洞分析
字数 1400 2025-08-18 11:36:47
某国产中间件文件上传漏洞分析与利用教学文档
漏洞概述
本漏洞存在于某国产中间件的文件上传功能中,攻击者可以通过构造特殊的压缩包文件,利用目录穿越漏洞将Webshell上传至可访问的Web目录,从而实现远程代码执行。
漏洞分析
漏洞触发路径
- 入口路由:
/xxxx/application/deployApp - 控制器:
ApplicationMgmtController - 关键方法:
deployApp
处理流程分析
-
初始化阶段:
- 根据请求参数初始化
AASAppDeployModel对象 - 获取
clientFile上传的文件内容,创建临时文件并存储文件名
- 根据请求参数初始化
-
部署处理:
- 默认
deployInServer为false,进入deployAppInClient方法 - 最终调用
AASAppServerServiceImpl#deployAppInClient
- 默认
-
JMX调用:
- 通过
MBeanInvokeUtils.invoke调用J2EEDeployer的deploy方法 - 参数包括上传文件的byte数组和其他配置参数
- 通过
-
文件处理:
saveArchive方法将上传文件保存到本地- 获取文件路径后调用另一个
deploy方法
-
应用部署:
- 创建
J2EEApplication对象 - 设置安装目录和扩展目录
- 如果
startType为null或"auto",则调用start()方法
- 创建
漏洞关键点
-
目录穿越漏洞:
- 在
FileUtil#unpackJarFile方法中解压文件时未对目录穿越进行防护 - 可以构造包含
../路径的压缩包文件
- 在
-
Web目录定位:
- 解压目录为
domains/deploy/{appName}/jarfiles/{appName}+hex(stamp) - 目标Web目录为
domains/applications/default/public_html/
- 解压目录为
-
文件上传限制:
- 支持上传zip等压缩文件
- 默认判断为EAR类型应用
漏洞利用
利用条件
- 能够访问
/xxxx/application/deployApp接口 - 能够上传zip格式的压缩文件
利用步骤
-
构造恶意压缩包:
- 创建包含Webshell的zip文件
- 使用目录穿越路径(如
../../applications/default/public_html/shell.jsp)
-
发送恶意请求:
POST /xxxxx/xxxx/application/deployApp HTTP/1.1
Host: [target]
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNotThoE1rFKMKxp5
------WebKitFormBoundaryNotThoE1rFKMKxp5
Content-Disposition: form-data; name="appName"
[任意应用名]
------WebKitFormBoundaryNotThoE1rFKMKxp5
Content-Disposition: form-data; name="deployInServer"
false
------WebKitFormBoundaryNotThoE1rFKMKxp5
Content-Disposition: form-data; name="clientFile"; filename="malicious.zip"
Content-Type: application/x-zip-compressed
[恶意zip文件内容]
------WebKitFormBoundaryNotThoE1rFKMKxp5
Content-Disposition: form-data; name="archivePath"
------WebKitFormBoundaryNotThoE1rFKMKxp5--
- 访问Webshell:
- 成功上传后,Webshell将位于
domains/applications/default/public_html/目录下 - 通过对应URL访问Webshell
- 成功上传后,Webshell将位于
防御建议
-
输入验证:
- 对上传的压缩包文件进行严格校验
- 过滤包含
../等路径穿越字符的文件名
-
安全配置:
- 限制上传文件的类型和大小
- 设置文件解压的白名单目录
-
代码修复:
- 在
FileUtil#unpackJarFile方法中添加路径规范化检查 - 对解压路径进行规范化处理,防止目录穿越
- 在
-
权限控制:
- 限制
deployApp接口的访问权限 - 实施最小权限原则
- 限制
总结
该漏洞利用中间件文件上传功能中的目录穿越缺陷,通过构造特殊压缩包实现任意文件上传。漏洞利用链涉及多个组件和方法调用,最终导致攻击者能够在Web目录下部署恶意文件。修复时应重点关注文件解压过程中的路径处理逻辑。