<
log4j<=1.2.17 Socket-反序列化漏洞
>
上一篇

PHP反序列化漏洞分析与构造
下一篇

组合利用链-zzzphp<=1.7.3文件上传getshell

log4j<=1.2.17 Socket-反序列化

前言

log4j是Apache开发的一个日志工具。可以将Web项目中的日志输出到控制台,文件,GUI组件,甚至是套接口服务器。本次出现漏洞就是因为log4j在启动套接口服务器后,对监听端口传入的反序列化数据没有进行过滤而造成的。

漏洞分析

查看log4j入口(主类)main方法,当启用log4j套接字日志服务器时,会启动一个监听端口,用来监听传入了命令,然后创建一个SocketNode的对象类。并将接受到的socket数据传入进行处理。

image1

ObjectInputStream是将对象的原始数据序列化,包括主机之间使用socket流传递对象,可以看到SocketNode方法中创建了一个ObjectInputStream对象直接获取socket输入流。

image-20200102230927309

然后在run方法中直接将未作处理的输入流,调用之前创建的ois对象的readObiect()进行读取反序列化操作。

image-20200105115849167

当加入含有漏洞版本的Commom-Collections Gadget依赖时会触发漏洞。

复现

为了触发漏洞将含有漏洞版本的Gadget依赖commons-collections-3.2.1.jar加入到log4j的classpath中,并启动log4j服务端。

Server端启动一个java类(主类)org.apache.log4j.net.SocketServer,这个类提供了main函数。

java -cp {xxx.jar} {主类名称} 监听端口 配置文件 配置文件

image-20200105113554993

使用ysoserial生成恶意payload后用nc提交

image-20200105111949546

漏洞被触发

image-20200105112334697

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

https://mp.weixin.qq.com/s/okU2y0izfnKXXtXG3EfLkQ

Top
Foot