2022-12-31 分類: 網站建設
構造惡意的序列化對象發送給目標主機:
執行系統命令:
RedHat發布JBoss相關產品的解決方案:
https://access.redhat.com/solutions/2045023
受影響的JBoss產品有:
Environment
Red Hat JBossA-MQ 6.x
Red Hat JBossBPM Suite (BPMS) 6.x
Red Hat JBossBRMS 6.x
Red Hat JBossBRMS 5.x
Red Hat JBossData Grid (JDG) 6.x
Red Hat JBossData Virtualization (JDV) 6.x
Red Hat JBossData Virtualization (JDV) 5.x
Red Hat JBossEnterprise Application Platform 6.x
Red Hat JBossEnterprise Application Platform 5.x
Red Hat JBossEnterprise Application Platform 4.3.x
Red Hat JBossFuse 6.x
Red Hat JBossFuse Service Works (FSW) 6.x
Red Hat JBossOperations Network (JBoss ON) 3.x
Red Hat JBossPortal 6.x
Red Hat JBossSOA Platform (SOA-P) 5.x
Red Hat JBossWeb Server (JWS) 3.x
案例三:Jenkins Remoting的相關API是用于實現分布式環境中master和slave節點或者master和CLI的訪問,API沒有身份認證并且支持序列化對象。
CVE-2016-0788通過Jenkins Remoting巧妙地開啟JRMP,JRMP觸發反序列化操作,從而進行漏洞的利用。作者已經提供了完整利用POC:
在遠程服務器開啟JRMI端口:
連接遠程服務端口,發送惡意序列化數據包:
這樣在Jenkins的根目錄就會生成一個pwned文件。
AllJenkinsmainlinereleasesuptoandincluding1.649
AllJenkinsLTSreleasesuptoandincluding1.642.1
漏洞防御
1、反序列化對象白名單控制,在resolveClass方法中校驗對象名字。
ObjectInputStream {
publicLookAheadObjectInputStream(InputStreaminputStream)
throwsIOException{
super(inputStream);
}
/**
* Only deserializeinstances of our expected Bicycle class
*/
@Override
protectedClass resolveClass(ObjectStreamClass desc)throwsIOException,
ClassNotFoundException {
if(!desc.getName().equals(Bicycle.class.getName())) {
throw newInvalidClassException(
"Unauthorized deserializationattempt",desc.getName());
}
return super.resolveClass(desc);
}
}
2、序列化數據采用對稱加密進行傳輸,接口調用增加身份認證。(此種方法僅僅能提升攻擊成本)
3、因為序列化機制不能保證數據的完整和和保密性,如果類中存在敏感數據并且那么這個類還需要序列化,需要在特定對象的一個域上關閉serialization,在這個域前加上關鍵字transient即可。
什么是序列化
序列化 (Serialization)是指將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。
簡單來說:
序列化: 將數據結構或對象轉換成二進制串的過程。
反序列化:將在序列化過程中所生成的二進制串轉換成數據結構或者對象的過程。
下面是將字符串對象先進行序列化,存儲到本地文件,然后再通過反序列化進行恢復的樣例代碼:
public static void main(String args[]) throws Exception {
String obj ="hello world!";
//將序列化對象寫入文件object.db中
FileOutputStream fos =new FileOutputStream("object.db");
ObjectOutputStream os= new ObjectOutputStream(fos);
os.writeObject(obj);
os.close();
//從文件object.db中讀取數據
FileInputStream fis =new FileInputStream("object.db");
ObjectInputStream ois= new ObjectInputStream(fis);
//通過反序列化恢復對象obj
String obj2 =(String)ois.readObject();
ois.close();
}
反序列化漏洞原理
反序列化漏洞的本質就是反序列化機制打破了數據和對象的邊界,導致攻擊者注入的惡意序列化數據在反序列化過程中被還原成對象,控制了對象就可能在目標系統上面執行攻擊代碼。Java序列化應用于RMI JMX JMS 技術中。
漏洞危害
案例一:Apache ActiveMQ 5.12.0 遠程代碼執行漏洞(JMS)Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,該漏洞源于程序未能限制可在代理中序列化的類。遠程攻擊者可借助特制的序列化的Java Message Service (JMS) ObjectMessage對象利用該漏洞執行任意代碼。
受到影響的消息系統如下:
Apache ActiveMQ 5.12.0 and earlier
HornetQ 2.4.0 and earlier
Oracle OpenMQ 5.1 and earlier
IBM Websphere MQ 8.0.0.4 and earlier
Oracle Weblogic 12c and earlier
Pivotal RabbitMQ JMS client 1.4.6 and earlier
IBM MessageSight MessageSight V1.2 JMSClient and earlier
SwiftMQ JMS client 9.7.3 and earlier
Apache ActiveMQ Artemis client 1.2.0 and earlier
Apache Qpid JMS client 0.9.0 and earlier
Amazon SQS Java Messaging Library 1.0.0 and earlier
案例二:JBoss 反序列化漏洞(JMX)Jboss利用的是HTTP協議,可以在任何端口上運行,默認安裝在8080端口中。JMX是一個java的管理協議,在Jboss中的JMXInvokerServlet可以使用HTTP協議與其進行通話。這一通信功能依賴于java的序列化類。
本地構造惡意的序列化對象
當前題目:【成都網頁制作】Java反序列化安全實例解析-成都創新互聯官方網站
文章網址:http://m.newbst.com/news37/227187.html
成都網站建設公司_創新互聯,為您提供靜態網站、品牌網站設計、搜索引擎優化、網站設計、網頁設計公司、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容