环境

IntelliJ IDEA 2020.1 x64

tomcat-8.5.46

JRE1.8

配置

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.  
  6. <modelVersion>4.0.</modelVersion>
  7. <groupId>org.apache.tomcat</groupId>
  8. <artifactId>Tomcat8.5.46</artifactId>
  9. <name>Tomcat8.5.46</name>
  10. <version>8.5</version>
  11.  
  12. <build>
  13. <finalName>Tomcat8.</finalName>
  14. <sourceDirectory>java</sourceDirectory>
  15. <!-- <testSourceDirectory>test</testSourceDirectory> -->
  16. <resources>
  17. <resource>
  18. <directory>java</directory>
  19. </resource>
  20. </resources>
  21. <!-- <testResources> -->
  22. <!-- <testResource> -->
  23. <!-- <directory>test</directory> -->
  24. <!-- </testResource> -->
  25. <!-- </testResources> -->
  26. <plugins>
  27. <plugin>
  28. <groupId>org.apache.maven.plugins</groupId>
  29. <artifactId>maven-compiler-plugin</artifactId>
  30. <version>2.0.</version>
  31.  
  32. <configuration>
  33. <encoding>UTF-</encoding>
  34. <source>1.8</source>
  35. <target>1.8</target>
  36. </configuration>
  37. </plugin>
  38. </plugins>
  39. </build>
  40.  
  41. <dependencies>
  42. <dependency>
  43. <groupId>org.easymock</groupId>
  44. <artifactId>easymock</artifactId>
  45. <version>3.5</version>
  46. <scope>test</scope>
  47. </dependency>
  48.  
  49. <dependency>
  50. <groupId>junit</groupId>
  51. <artifactId>junit</artifactId>
  52. <version>4.12</version>
  53. <scope>test</scope>
  54. </dependency>
  55. <dependency>
  56. <groupId>ant</groupId>
  57. <artifactId>ant</artifactId>
  58. <version>1.7.</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>wsdl4j</groupId>
  62. <artifactId>wsdl4j</artifactId>
  63. <version>1.6.</version>
  64. </dependency>
  65. <dependency>
  66. <groupId>javax.xml</groupId>
  67. <artifactId>jaxrpc</artifactId>
  68. <version>1.1</version>
  69. </dependency>
  70. <dependency>
  71. <groupId>org.eclipse.jdt.core.compiler</groupId>
  72. <artifactId>ecj</artifactId>
  73. <version>4.6.</version>
  74. </dependency>
  75. </dependencies>
  76. </project>

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.  
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>gxf</groupId>
  8. <artifactId>apache-tomcat-8</artifactId>
  9. <name>apache-tomcat-8-source</name>
  10. <version>1.0</version>
  11. <packaging>pom</packaging>
  12. <modules>
  13. <module>apache-tomcat-8.5.46-src</module>
  14. </modules>
  15. </project>

pom.xml ->  Maven -> Reimport

Main class

  1. org.apache.catalina.startup.Bootstrap

 

 

VM options

  1. -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解析器初始化:

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

  

IDEA 快捷键 功能描述

  1. F8 单步调试,不进入函数内部
  2. F7 单步调试,进入函数内部
  3. Shift+F7 选择要进入的函数
  4. Shift+F8 跳出函数
  5. Alt+F9 运行到断点
  6. Alt+F8 执行表达式查看结果
  7. F9 继续执行,进入下一个断点或执行完程序
  8. Ctrl+F8 设置/取消当前行断点
  9. 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

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

  

Tomcat Ghostcat - AJP协议漏洞DEBUG的更多相关文章

  1. tomcat的AJP(定向包协议)协议

    由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过aj ...

  2. tomcat中AJP协议和HTTP协议的区别

    tomcat的server.xml中的AJP和HTTP连接器区别 HTTP协议:连接器监听8080端口,负责建立HTTP连接.在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器. ...

  3. AJP协议总结与分析

    Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户.默认情况下,Tomcat在server.x ...

  4. Java安全之初探weblogic T3协议漏洞

    Java安全之初探weblogic T3协议漏洞 文章首发自安全客:Java安全之初探weblogic T3协议漏洞 0x00 前言 在反序列化漏洞里面就经典的还是莫过于weblogic的反序列化漏洞 ...

  5. tomcat配置https协议

    tomcat配置https协议 1.找到本地jdk底下的bin目录,bin目录底下存在文件keytool.exe(在bin目录下空白处,按住shift右击,打开命令窗口,如下图) 2.在cmd的命令窗 ...

  6. Tomcat 对 HTTP 协议的实现(下)

    在<Tomcat 对 HTTP 协议的实现(上)>一文中,对请求的解析进行了分析,接下来对 Tomcat 生成响应的设计和实现继续分析.本文首发于(微信公众号:顿悟源码) 一般 Servl ...

  7. 配置Tomcat使用https协议(配置SSL协议)

    配置Tomcat使用https协议(配置SSL协议) 2014-01-20 16:38 58915人阅读 评论(3) 收藏 举报 转载地址:http://ln-ydc.iteye.com/blog/1 ...

  8. Tomcat配置https协议访问

    Tomcat9配置https协议访问: https://blog.csdn.net/weixin_42273374/article/details/81010203 配置Tomcat使用https协议 ...

  9. 【研究】Tomcat远程代码执行漏洞(CVE-2017-12615)

    一.Tomcat远程代码执行漏洞(CVE-2017-12615) 1.1       实验环境 操作机:windows 10                         IP:192.168.1. ...

随机推荐

  1. python3(一)

    print('test', '怎么自动建了这么多目录', 'aaaaaaa') #test 怎么自动建了这么多目录 aaaaaaa 注释# # ---------------------------- ...

  2. 科技发展时间线(Technology Timeline)

    本文主要记录,过去两百年间,科技发展的时间线 这些内容,是自己在学习电脑发展历史的时候做的, 感兴趣的同学,可以复制到 Excel 里面,按顺序逐一进行学习, 学习和整理的过程确实花了很长时间,但是并 ...

  3. vue 中 history 模式的配置和打包

    在使用 vue 进行项目开发中,默认的路由形式是 hash,表现形式就是 url 中始终带有 # 号,在后台管理类的项目中并不影响使用,但是在特殊场景,比如微信分享的H5链接中,微信会自动拼接参数,由 ...

  4. AJ学IOS 之tableView的下拉放大图片的方法

    AJ分享,必须精品 一:效果 tableview下拉的时候上部分图片放大会 二:代码 直接上代码,自己研究吧 #import "NYViewController.h" //图片的高 ...

  5. Python之利用jieba库做词频统计且制作词云图

    一.环境以及注意事项 1.windows10家庭版 python 3.7.1 2.需要使用到的库 wordcloud(词云),jieba(中文分词库),安装过程不展示 3.注意事项:由于wordclo ...

  6. windows批处理protoc生成C++代码

    1 首先需要生成protoc的可执行文件,具体可以参考  https://www.cnblogs.com/cnxkey/articles/10152646.html 2 将单个protoc文件生成.h ...

  7. 实例讲解Springboot以Repository方式整合Redis

    1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. ...

  8. [YII2] 文件上传类

    //测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...

  9. SK-learn实现k近邻算法【准确率随k值的变化】-------莺尾花种类预测

    代码详解: from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split fr ...

  10. Java 多线程 --死锁及解决方案

    在java 多线程中 过多的同步造成相互不释放资源 从而相互等待,造成死锁线现象,一般发生于同步中持有多个对象锁 如以下代码: public class DeadLock { public stati ...