Weblogic 反序列化命令執行漏洞(CVE-2018-2628)


漏洞概述

​ 2018年4月17日,北京時間4月18日凌晨,Oracle官方發布了4月份的關鍵補丁更新CPU(Critical Patch Update),其中包含一個高危的Weblogic反序列化漏洞(CVE-2018-2628),這個漏洞是在2017年11月份報給Oracle的,通過該漏洞,攻擊者可以在未授權的情況下遠程執行任意代碼。

其基本原理其實都是利用了T3協議的缺陷實現了Java虛擬機的RMI:遠程方法調用(Remote Method Invocation),能夠在本地虛擬機上調用遠端代碼。

影響版本

10.3.6.0,12.1.3.0,12.2.1.2, 12.2.1.3

JAVA序列化和反序列化

1.序列化

Java是運行在JVM(java虛擬機)之上的一種語言,我們通過命令行javac生成的字節碼格式的類文件在任何平台的JVM上都可以運行而JVM(java虛擬機)運行時會解釋類文件中的命令。在Java下對象這個概念很重要,java允許我們在內存中創建可復用的對象,但是一般情況下,只有當JVM屬於運行狀態時,這些對象才能夠存在,也就是說這些對象的生命周期沒有JVM的生命周期來的長。那如果我們需要保證即使在JVM停止運行的情況下,也能夠保存相關制定對象,並且在將來某個時刻能夠被讀取是用得到,Java的序列化正是為了解決這一需求而產生的。

Java序列化是指把Java對象轉換為字節序列的過程便於保存在內存、文件、數據庫中,ObjectOutputStream類的writeObject()方法可以實現序列化。

2.反序列化

通過對序列化的理解,那么就可以很好的來理解反序列化。

反序列化的過程是指把字節序列恢復為 Java 對象的過程。我們可以將反序列化理解為一個”讀”操作,通過ObjectInputStream 類的 readObject() 方法可以將對象實例進行”反序列化”操作。

綜合來說,序列化與反序列化是讓 Java 對象脫離 Java 運行環境的一種手段,可以有效的實現多平台之間的通信、對象持久化存儲。

漏洞原理

遠程攻擊者可利用該漏洞在未授權的情況下發送攻擊數據,通過T3協議(EJB支持遠程訪問,且支持多種協議。這是web Container和EJB Container的主要區別)在Weblogic Server在執行反序列化操作,利用RMI(遠程方法調用)機制的缺陷,通過JRMP協議(JAVA Remote Messaging Protocol: Java遠程消息交換協議)達到執行任意反序列化目的。

環境搭建

vulhub

漏洞復現

使用ysoserial工具啟動一個JRMP Server:

接下來使用exploit.py腳本,向服務器發送數據包:

連接成功,並且返回了payload,可以繼續利用上傳shell。

接下來進入容器內,查看命令是否執行:

漏洞修復

更新至最新版

禁用T3協議

參考鏈接

https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628

https://blog.csdn.net/he_and/article/details/90580999

https://github.com/jas502n/CVE-2018-2628

https://www.cnblogs.com/sallyzhang/p/12326738.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM