作者:qinyu1982_469 | 来源:互联网 | 2024-10-16 20:11
本文由编程笔记#小编为大家整理,主要介绍了log4j<=1.2.17反序列化漏洞(CVE-2019-17571)分析相关的知识,希望对你有一定的参考价值。
PS: 文章仅用于研究漏洞原理,促进更好的防御,
禁止用于非法用途,否则后果自负!!!
log4j
是Apache开发的一个日志工具。可以将Web项目中的日志输出到
控制台
,
文件
,
GUI组件
,甚至是
套接口服务器
。本次出现漏洞就是因为
log4j
在启动套接口服务器后,对监听端口传入的反序列化数据没有进行过滤而造成的。下面我们以
log4j-1.2.17.jar
的源码来进行分析。
当
log4j
启动套接字服务器时,会监听我们命令行传入的端口。然后会创建一个
SocketNode
类的对象来对端口接收到的数据进行处理。
跟进
SocketNode
类,可以发现在对象初始化时,将端口接收到的数据封装为一个
Object流对象
。在
run()
方法中直接调用
readObject()
进行反序列化操作。
这个过程中没有任何过滤措施,总体下来可谓简单粗暴。所以只要运行
log4j
的
classpath
中存在可以利用的
Gadget
就可以直接命令执行了。
为了方便演示我主动将
commons-collections-3.2.1.jar
加入到
log4j
的
classpath
中。然后使用
nc
提交生成的恶意序列化文件到
log4j
监听的
4560
端口,漏洞触发。
在实际的生产环境中,开发人员有时候需要对日志进行集中存储和管理时,会单独在日志服务器上,启动
log4j
套接字服务器,来接收各个Web项目发送过来的日志。在这种场景下可能会存在该漏洞。但鸡肋的是这样启动的
log4j
一般不会有当下已知的
Gadget
。虽然如此,在渗透测试过程中还是可以注意下
4560
端口,说不定有惊喜。