Tomcat Ghostcat - AJP协议漏洞DEBUG
环境
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.</modelVersion>
- <groupId>org.apache.tomcat</groupId>
- <artifactId>Tomcat8.5.46</artifactId>
- <name>Tomcat8.5.46</name>
- <version>8.5</version>
- <build>
- <finalName>Tomcat8.</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.</version>
- <configuration>
- <encoding>UTF-</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.</version>
- </dependency>
- <dependency>
- <groupId>wsdl4j</groupId>
- <artifactId>wsdl4j</artifactId>
- <version>1.6.</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.</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,分别为DefaultServlet
和JspServlet
:
当请求.*.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);
- %>
Tomcat Ghostcat - AJP协议漏洞DEBUG的更多相关文章
- tomcat的AJP(定向包协议)协议
由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过aj ...
- tomcat中AJP协议和HTTP协议的区别
tomcat的server.xml中的AJP和HTTP连接器区别 HTTP协议:连接器监听8080端口,负责建立HTTP连接.在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器. ...
- AJP协议总结与分析
Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户.默认情况下,Tomcat在server.x ...
- Java安全之初探weblogic T3协议漏洞
Java安全之初探weblogic T3协议漏洞 文章首发自安全客:Java安全之初探weblogic T3协议漏洞 0x00 前言 在反序列化漏洞里面就经典的还是莫过于weblogic的反序列化漏洞 ...
- tomcat配置https协议
tomcat配置https协议 1.找到本地jdk底下的bin目录,bin目录底下存在文件keytool.exe(在bin目录下空白处,按住shift右击,打开命令窗口,如下图) 2.在cmd的命令窗 ...
- Tomcat 对 HTTP 协议的实现(下)
在<Tomcat 对 HTTP 协议的实现(上)>一文中,对请求的解析进行了分析,接下来对 Tomcat 生成响应的设计和实现继续分析.本文首发于(微信公众号:顿悟源码) 一般 Servl ...
- 配置Tomcat使用https协议(配置SSL协议)
配置Tomcat使用https协议(配置SSL协议) 2014-01-20 16:38 58915人阅读 评论(3) 收藏 举报 转载地址:http://ln-ydc.iteye.com/blog/1 ...
- Tomcat配置https协议访问
Tomcat9配置https协议访问: https://blog.csdn.net/weixin_42273374/article/details/81010203 配置Tomcat使用https协议 ...
- 【研究】Tomcat远程代码执行漏洞(CVE-2017-12615)
一.Tomcat远程代码执行漏洞(CVE-2017-12615) 1.1 实验环境 操作机:windows 10 IP:192.168.1. ...
随机推荐
- python3(一)
print('test', '怎么自动建了这么多目录', 'aaaaaaa') #test 怎么自动建了这么多目录 aaaaaaa 注释# # ---------------------------- ...
- 科技发展时间线(Technology Timeline)
本文主要记录,过去两百年间,科技发展的时间线 这些内容,是自己在学习电脑发展历史的时候做的, 感兴趣的同学,可以复制到 Excel 里面,按顺序逐一进行学习, 学习和整理的过程确实花了很长时间,但是并 ...
- vue 中 history 模式的配置和打包
在使用 vue 进行项目开发中,默认的路由形式是 hash,表现形式就是 url 中始终带有 # 号,在后台管理类的项目中并不影响使用,但是在特殊场景,比如微信分享的H5链接中,微信会自动拼接参数,由 ...
- AJ学IOS 之tableView的下拉放大图片的方法
AJ分享,必须精品 一:效果 tableview下拉的时候上部分图片放大会 二:代码 直接上代码,自己研究吧 #import "NYViewController.h" //图片的高 ...
- Python之利用jieba库做词频统计且制作词云图
一.环境以及注意事项 1.windows10家庭版 python 3.7.1 2.需要使用到的库 wordcloud(词云),jieba(中文分词库),安装过程不展示 3.注意事项:由于wordclo ...
- windows批处理protoc生成C++代码
1 首先需要生成protoc的可执行文件,具体可以参考 https://www.cnblogs.com/cnxkey/articles/10152646.html 2 将单个protoc文件生成.h ...
- 实例讲解Springboot以Repository方式整合Redis
1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. ...
- [YII2] 文件上传类
//测试文件上传类 public function actionCreate() { $model = new Lvyou(); $upload_model = new \app\models\Upl ...
- SK-learn实现k近邻算法【准确率随k值的变化】-------莺尾花种类预测
代码详解: from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split fr ...
- Java 多线程 --死锁及解决方案
在java 多线程中 过多的同步造成相互不释放资源 从而相互等待,造成死锁线现象,一般发生于同步中持有多个对象锁 如以下代码: public class DeadLock { public stati ...