zoukankan      html  css  js  c++  java
  • Tomcat Ghostcat

    环境

    IntelliJ IDEA 2020.1 x64

    tomcat-8.5.46

    JRE1.8

    配置

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>Tomcat8.5.46</artifactId>
        <name>Tomcat8.5.46</name>
        <version>8.5</version>
    
    
        <build>    
            <finalName>Tomcat8.0</finalName>    
            <sourceDirectory>java</sourceDirectory>    
    <!--        <testSourceDirectory>test</testSourceDirectory>    -->
            <resources>    
                <resource>    
                    <directory>java</directory>    
                </resource>    
            </resources>    
    <!--        <testResources>    -->
    <!--            <testResource>    -->
    <!--                <directory>test</directory>    -->
    <!--            </testResource>    -->
    <!--        </testResources>    -->
            <plugins>    
                <plugin>    
                    <groupId>org.apache.maven.plugins</groupId>    
                    <artifactId>maven-compiler-plugin</artifactId>    
                    <version>2.0.2</version>    
        
                    <configuration>    
                        <encoding>UTF-8</encoding>    
                        <source>1.8</source>    
                        <target>1.8</target>    
                    </configuration>    
                </plugin>    
            </plugins>    
        </build>    
    
       <dependencies>  
            <dependency>  
                <groupId>org.easymock</groupId>  
                <artifactId>easymock</artifactId>  
                <version>3.5</version>  
                <scope>test</scope>  
            </dependency>  
      
            <dependency>    
                <groupId>junit</groupId>    
                <artifactId>junit</artifactId>    
                <version>4.12</version>  
                <scope>test</scope>    
            </dependency>    
            <dependency>    
                <groupId>ant</groupId>    
                <artifactId>ant</artifactId>    
                <version>1.7.0</version>    
            </dependency>    
            <dependency>    
                <groupId>wsdl4j</groupId>    
                <artifactId>wsdl4j</artifactId>    
                <version>1.6.2</version>    
            </dependency>    
            <dependency>    
                <groupId>javax.xml</groupId>    
                <artifactId>jaxrpc</artifactId>    
                <version>1.1</version>    
            </dependency>    
            <dependency>    
                <groupId>org.eclipse.jdt.core.compiler</groupId>    
                <artifactId>ecj</artifactId>    
                <version>4.6.1</version>  
            </dependency>    
        </dependencies>    
    </project>

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>gxf</groupId>    
        <artifactId>apache-tomcat-8</artifactId>    
        <name>apache-tomcat-8-source</name>    
        <version>1.0</version>    
        <packaging>pom</packaging> 
        <modules>    
            <module>apache-tomcat-8.5.46-src</module>    
        </modules>    
    </project>
    

     pom.xml ->  Maven -> Reimport

     

    Main class 

    org.apache.catalina.startup.Bootstrap
    

     

     

     VM options

    -Dcatalina.home=catalina-home -Dcatalina.base=catalina-home -Djava.endorsed.dirs=catalina-home/endorsed -Djava.io.tmpdir=catalina-home/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=catalina-home/conf/logging.properties
    

     

    将JSP解析器初始化:

      context.addServletContainerInitializer(new JasperInitializer(),null);
    

      

    IDEA 快捷键 功能描述  

    F8 单步调试,不进入函数内部 
    F7 单步调试,进入函数内部 
    Shift+F7 选择要进入的函数 
    Shift+F8 跳出函数 
    Alt+F9 运行到断点 
    Alt+F8 执行表达式查看结果 
    F9 继续执行,进入下一个断点或执行完程序 
    Ctrl+F8 设置/取消当前行断点 
    Ctrl+Shift+F8 查看断点

    Tomcat中Servlet的配置是在conf/web.xml。Tomcat默认配置定义了两个servlet,分别为DefaultServletJspServlet

     

    当请求.*.jsp *.jspx 会以JspServlet 执行 (文件包含漏洞利用)

    当请求 xxxx 会以 DefaultServlet 执行   (文件读取漏洞利用)

    POC:

    通过  prepareRequest 解析请求

     

     经过3次循环,依次将 javax.servlet.include.request_uri      javax.servlet.include.path_info    javax.servlet.include.servlet_path 放入request对象

     

    执行 

     不能读取除了webapps 目录下文件的原因

    如果含有./ ../ 就会返回为null

    POC中还有个关键参数req_uri,这个参数的设置决定了我们可以读取webapps下其他目录的文件。设置其值为一个随意字符串'asdf',一来是无法匹配到webapps下的路径,走tomcat默认的ROOT目录;

    二来是为了让tomcat将请求流到DefaultServlet,从而触发漏洞。当请求读取WEB-INF/web.xml文件,则读取的就是webapps/ROOT/WEB-INF/目录下的web.xml。

    修改POC req_uri 请求,为 /manager/0xdd   javax.servlet.include.path_info 为要读取的文件名

     

     文件包含漏洞 req_uri 请求为 xxx.jsp 即可,就可以走Jspservlet

    <%
    String []cmdArray = new String[]{ "/bin/sh", "-c", "echo `whoami`" + " > ./webapps/ROOT/ok.txt"};
     Runtime.getRuntime().exec(cmdArray);
    %>
    

      

  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/0xdd/p/12841178.html
Copyright © 2011-2022 走看看