某国产中间件文件上传漏洞分析
字数 1400 2025-08-18 11:36:47

某国产中间件文件上传漏洞分析与利用教学文档

漏洞概述

本漏洞存在于某国产中间件的文件上传功能中,攻击者可以通过构造特殊的压缩包文件,利用目录穿越漏洞将Webshell上传至可访问的Web目录,从而实现远程代码执行。

漏洞分析

漏洞触发路径

  1. 入口路由/xxxx/application/deployApp
  2. 控制器ApplicationMgmtController
  3. 关键方法deployApp

处理流程分析

  1. 初始化阶段

    • 根据请求参数初始化AASAppDeployModel对象
    • 获取clientFile上传的文件内容,创建临时文件并存储文件名
  2. 部署处理

    • 默认deployInServer为false,进入deployAppInClient方法
    • 最终调用AASAppServerServiceImpl#deployAppInClient
  3. JMX调用

    • 通过MBeanInvokeUtils.invoke调用J2EEDeployerdeploy方法
    • 参数包括上传文件的byte数组和其他配置参数
  4. 文件处理

    • saveArchive方法将上传文件保存到本地
    • 获取文件路径后调用另一个deploy方法
  5. 应用部署

    • 创建J2EEApplication对象
    • 设置安装目录和扩展目录
    • 如果startType为null或"auto",则调用start()方法

漏洞关键点

  1. 目录穿越漏洞

    • FileUtil#unpackJarFile方法中解压文件时未对目录穿越进行防护
    • 可以构造包含../路径的压缩包文件
  2. Web目录定位

    • 解压目录为domains/deploy/{appName}/jarfiles/{appName}+hex(stamp)
    • 目标Web目录为domains/applications/default/public_html/
  3. 文件上传限制

    • 支持上传zip等压缩文件
    • 默认判断为EAR类型应用

漏洞利用

利用条件

  1. 能够访问/xxxx/application/deployApp接口
  2. 能够上传zip格式的压缩文件

利用步骤

  1. 构造恶意压缩包

    • 创建包含Webshell的zip文件
    • 使用目录穿越路径(如../../applications/default/public_html/shell.jsp
  2. 发送恶意请求

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--
  1. 访问Webshell
    • 成功上传后,Webshell将位于domains/applications/default/public_html/目录下
    • 通过对应URL访问Webshell

防御建议

  1. 输入验证

    • 对上传的压缩包文件进行严格校验
    • 过滤包含../等路径穿越字符的文件名
  2. 安全配置

    • 限制上传文件的类型和大小
    • 设置文件解压的白名单目录
  3. 代码修复

    • FileUtil#unpackJarFile方法中添加路径规范化检查
    • 对解压路径进行规范化处理,防止目录穿越
  4. 权限控制

    • 限制deployApp接口的访问权限
    • 实施最小权限原则

总结

该漏洞利用中间件文件上传功能中的目录穿越缺陷,通过构造特殊压缩包实现任意文件上传。漏洞利用链涉及多个组件和方法调用,最终导致攻击者能够在Web目录下部署恶意文件。修复时应重点关注文件解压过程中的路径处理逻辑。

某国产中间件文件上传漏洞分析与利用教学文档 漏洞概述 本漏洞存在于某国产中间件的文件上传功能中,攻击者可以通过构造特殊的压缩包文件,利用目录穿越漏洞将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 ) 发送恶意请求 : 访问Webshell : 成功上传后,Webshell将位于 domains/applications/default/public_html/ 目录下 通过对应URL访问Webshell 防御建议 输入验证 : 对上传的压缩包文件进行严格校验 过滤包含 ../ 等路径穿越字符的文件名 安全配置 : 限制上传文件的类型和大小 设置文件解压的白名单目录 代码修复 : 在 FileUtil#unpackJarFile 方法中添加路径规范化检查 对解压路径进行规范化处理,防止目录穿越 权限控制 : 限制 deployApp 接口的访问权限 实施最小权限原则 总结 该漏洞利用中间件文件上传功能中的目录穿越缺陷,通过构造特殊压缩包实现任意文件上传。漏洞利用链涉及多个组件和方法调用,最终导致攻击者能够在Web目录下部署恶意文件。修复时应重点关注文件解压过程中的路径处理逻辑。