Apache Tomcat Ajp-CVE-2020-1938漏洞复现
环境搭建:
sudo docker pull duonghuuphuc/tomcat-8.5.32
sudo docker run -d -it -p 8080:8080 -p 8009:8009 --name ghostcat duonghuuphuc/tomcat-8.5.32


tomcat调试:
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
漏洞复现:
任意文件读取


任意文件包含
请求存在的jsp使其包含指定的文件中的jsp代码


实际上根据不同的匹配将由不同的serverlet进行处理
漏洞分析:
这里根据网上的exp来分析一下:
首先去去github看看是啥时候commit修复的该漏洞

可以确定2月5号已经修复该问题了,点进去看看修复点

可以看到这里把原先的监听外网,改为监听本地地址了,根据网上的资料可以看到实际上攻击过程主要控制以下三个属性,发送的消息如果包含着三个值,那么serverlet将根据三个值属性进行request请求的改造,而这三个值都可以直接加到ajp数据包中

从修改的文件中大致可以推断到处理ajp消息的文件,进去看看

其中AjpProcessor.java中定义了处理jsp数据包中attributes中的逻辑,可以看到在处理attr属性时else了一条set,那么如果n,v可控就可以注入属性了

实际上上面的设置属性是在prepareRequest函数中,处理完后将调用getAdapter继续之后的请求过程,即匹配serverlet了

文件包含
org/apache/jasper/servlet/JspServlet.java

实际上这里文件包含只需要用到这两个属性即可,当然前提是匹配到存在的jsp文件,例如请求index.jsp

文件读取:
直接双shift找到defaultserverlet,在doget方法中通过getRelaticePath拿到请求的路径


这里将通过设置的属性来获取最重要读取的文件属性,这里需要同时设置这三个属性才可以,因为此时请求路径不存在,所以就从属性中取路径了,只要求该属性不为null即可,并重新定义要读取的文件


之后经过处理将这两个属性拼接并返回,即serverlet_path/path_info,之后就读取文件资源
看一下git上的ajp的一个demo

这里调用完end以后就构造完数据包,接下来就发包了,所以要改一下end函数

这里结束字节是0XFF,所以要在该字节前面插入

抓包可以看到ajp协议的通信过程

可以清楚看到所加入的属性值,都是明文,加入位置也可以清楚看到
总结:
任意文件读取和任意文件包含范围:
webapps目录下的文件,默认的exp只能读取webapps/ROOT下的文件
任意包含只需要:
1.请求存在的jsp
2.pathinfo和serverlet_path两个属性执行包含的文件
任意文件读取:
1.请求不存在的文件
2.request_uri属性必须存在,值可为任意
3.pathinfo和serverlet_path组合对应文件路径
修复:
1.若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。


监听本地:
<Connector protocol="AJP/1.3"
address="::1"
port=""
redirectPort="" />
此时重启tomcat即测试不成功

2.增加ajp connector密钥认证方式
tomcat version7 version9
<Connector port="" protocol="AJP/1.3" redirectPort="" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
tomcat version8

tips:
影响范围:
Apache Software Foundation Tomcat 6.*
Apache Software Foundation Tomcat 7.0.0 - 7.0.99
Apache Software Foundation Tomcat 8.0.0 - 8.5.50
Apache Software Foundation Tomcat 9.0.0 - 9.0.30
poc地址:
https://github.com/0nise/CVE-2020-1938
参考:
https://blog.csdn.net/yiqiushi4748/article/details/104428847
https://blog.csdn.net/wangchengsi/article/details/2973012 coyote框架
https://youmeek.gitbooks.io/intellij-idea-tutorial/content/remote-debugging.html idea之旅
https://xz.aliyun.com/t/7325 先知讲tomcat的,还行
Apache Tomcat Ajp-CVE-2020-1938漏洞复现的更多相关文章
- Apache Solr Velocity模板注入RCE漏洞复现
Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...
- Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现
Apache Druid 远程代码执行 CVE-2021-25646 漏洞复现 前言 Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供 ...
- Apache Tomcat RCE(CVE-2017-12615 )漏洞案例分析
首先搭建tomcat环境: 下载当前项目的版本的tomcat
- Tomcat CVE-2017-12615 远程上传漏洞复现
漏洞名称:CVE-2017-12615-远程代码执行漏洞 CVE-2017-12615:远程代码执行漏洞 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 r ...
- apache tomcat 目录session应用信息漏洞
Tomcat 是一款开源的 Web 应用服务器软件.Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发和调试 JSP 程序的首选. 漏洞描述 apache T ...
- Apache+tomcat ajp模式转发域名
本示例使用Apache24 和 tomcat7.0.62 本机IP:192.168.10.38 要实现的效果 访问来源 192.168.10.38 ---->apache ----&g ...
- Apache Struts2 S2-013远程代码执行漏洞复现
墨者学院开的靶场 进入环境 Struts2-013好家伙,框架直接写脸上,怕人看不出来= = 看了看源码什么的啥都没发现= = 去了解了一下这个漏洞,爬回来继续做 漏洞原理 struts2的标签中&l ...
- Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
漏洞原理 Tomcat配置了两个Connecto,它们分别是HTTP和AJP. HTTP默认端口为8080,处理http请求:AJP默认端口8009,用于处理 AJP 协议的请求. AJP比http更 ...
- CVE-2020-1938:Apache-Tomcat-Ajp漏洞-复现
0x00 漏洞简介 Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行. Apache Tomcat服务器存在文件包含 ...
- 8.Struts2-057漏洞复现
漏洞信息: 定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行. url标签未设置va ...
随机推荐
- cogs 1298. 通讯问题 Tarjan
1298. 通讯问题 ★★ 输入文件:jdltt.in 输出文件:jdltt.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员 ...
- MySQL UTF-8 常用字符排序规则
排序规则 解释 utf8_general_ci 不区分大小写 utf8_general_cs 区分大小写 utf8_bin 区分大小写,字符串每个字符串用二进制数据编译存储,且支持存储二进制数据
- Python中函数参数 *args 和 **kwargs
普通参数,即在调用函数时必须按照准确的顺序来进行参数传递. 默认参数,即参数含有默认值,在调用函数时可以进行参数传递,若没有进行参数传递则使用默认值,要注意,默认参数必须在普通参数的右侧(否则解释器无 ...
- SVN打patch,某Java文件提示svn:mime-type = application/octet-stream的问题
在使用SVN合版本时发现某文件有冲突,正常冲突文件是可以编辑修改的,但是该文件无法编辑,我只好选择后续修改选项,问题好诡异啊!!!在解决完其他冲突后,我选择了在eclipse开发工具内将修改的代码调整 ...
- Django框架的初使用
1Django框架的初使用 说起Django框架,肯定需要首先明确一个概念,即软件框架.下面就是第一个问题: 1 软件框架(software framework) 1.1 概念界定 软件框架:通常指的 ...
- THUWC2020 自闭记
DAY 1 报道 领胸牌和-围巾-! 发现我和 \(ssf\) 小姐姐一个考场. 合影+开幕式 宾馆睡了一觉-睡上午觉真的舒服. 合影时在c位! 开幕式.比上次夏令营不知道好到哪里去了,讲话都挺有意思 ...
- 神器| 这款软件让win系统像Mac系统一样的好用!
每天进步一丢丢,连接梦与想 输不起的人,往往就是赢不了的人 使用过 Mac OS X 系统的朋友可能都会使用过自带的 Quick Look 快速预览功能,用鼠标选中一个文件后,再按下键盘空格键就会弹出 ...
- 【JQ】 validate验证表单时多个name相同的元素的解决办法
使用jQuery.validate插件http://jqueryvalidation.org/,当节点的name相同时候,脚本特意忽略剩余节点,导致所有相关节点的errMsg都显示在第一个相关节点上. ...
- orcle 创建用户的几个步骤
创建用户一般分四步: 第一步:创建临时表空间 第二步:创建数据表空间 第三步:创建用户并制定表空间 第四步:给用户授予权限1.创建临时表空间 create temporary tablespace t ...
- web api 的 安全 认证问题 , 对外开放 的 时候 需要考虑到安全的问题
关于 OWIN OAuth , web api的认证,全局验证, 安全方面的验证 有必要 去 自己捣鼓一下.