• Java RMI 远程代码执行漏洞


    0x01 漏洞描述

    - Java RMI 远程代码执行漏洞 -

    Java RMI服务是远程方法调用,是J2SE的一部分,能够让程序员开发出基于JAVA的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地JAVA对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样。在RMI的通信过程中,默认使用序列化来完成所有的交互,如果该服务器Java RMI端口(默认端口1099)对公网开放,且使用了存在漏洞的Apache Commons Collections版本,就可以在该服务器上执行相关命令。

    0x02 漏洞验证

    使用Nmap工具对目标服务器端口扫描,探测发现Java RMI服务端口号。

    # 指定默认端口探测命令
    nmap -vv -sS -sV -p 1099 目标IP地址
    # 全部端口探测命令
    nmap -vv -sS -sV -p 1-65535 目标IP地址
    
    # 探测结果
    PORT     STATE SERVICE  REASON         VERSION
    1099/tcp open  java-rmi syn-ack ttl 64 Java RMI
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输入目标地址端口,使用工具远程执行系统命令。

    • 工具链接: https://pan.baidu.com/s/1i4gatlzs9mAoCocyAmnHNw 提取码: 35cs

    上述利用工具不支持多命令拼接执行,可以在vps上设置好监听地址后,使用如下方法反弹shell获取服务器权限。

    0x03 漏洞修复

    1. 禁止在公网开放Java RMI服务的端口;
    2. 下载SerialKiller临时补丁,这个jar后放置于classpath,将应用代码中的java.io.ObjectInputStream替换为SerialKiller,之后配置让其能够允许或禁用一些存在问题的类,SerialKiller有Hot-Reload,Whitelisting,Blacklisting几个特性,控制了外部输入反序列化后的可信类型
    3. 在不影响业务的情况下,临时删除掉项目里的InvokerTransformer.class文件;
    4. 对WebLogic、Apache、JBoss等中间件进行升级。

    参考分析:https://www.freebuf.com/column/200796.html

  • 相关阅读:
    ESP8266-Arduino编程实例-AHT20温湿度传感器驱动
    Mysql-体系结构
    第二周学习:卷积神经网络
    Java 文本检索神器 "正则表达式"
    Jackson序列化与反序列化
    69.x的平方根
    从开发流程看 PyQt5 入门
    封装一个websocket,支持断网重连、心跳检测,拿来开箱即用
    Python pandas读取Excel文件报错
    A RANSOMWARE, HOW DO I RECOVER?
  • 原文地址:https://blog.csdn.net/weixin_43571641/article/details/128109553