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);
    %>
    

      

  • 相关阅读:
    第五章 χ2检验
    统计学中的自由度
    第四章 统计推断
    个性化排序算法实践(二)——FFM算法
    个性化排序算法实践(一)——FM算法
    稀疏矩阵在Python中的表示方法
    个性化召回算法实践(五)——item2vec
    个性化召回算法实践(四)——ContentBased算法
    个性化召回算法实践(三)——PersonalRank算法
    个性化召回算法实践(二)——LFM算法
  • 原文地址:https://www.cnblogs.com/0xdd/p/12841178.html
Copyright © 2011-2022 走看看