weblogic反序列化基本概念

在這裏插入圖片描述
如圖,weblogic反序列化在利用過程中,主要考慮四個部分

  1. Deliver_way :payload通過什麼方式傳入服務器
  2. Payload:payload是什麼格式,xml本身即爲序列化對象,可直接反序列化。ysoserial生成的payload,爲序列化文件
  3. Write object():若非序列化數據,則首先經過writeobject()進行序列化
  4. Readobject():反序列化數據

一:所謂序列化,我理解只是數據在傳輸過程中的一種轉化格式

如222 —> xxx —> 222
222 —> xxx 的過程即爲序列化,一般通過jdk中的java.io.objectoutputstream的write object()方法實現
Xxx —> 222 的過程即爲反序列化,一般通過jdk中的java.io.objectinputstream的readobject()方法實現

二:readobject() 爲什麼會任意代碼執行

根據readobject()函數中定義不同,利用不同的payload構造不同的反射鏈,從而實現任意代碼執行。
這裏以java apache commons collections 序列化rce漏洞分析爲例子(payload)
Invoker transformer—> transform 拼接成Runtime.getRuntime().exec(cmd)
在這裏插入圖片描述
反射機制:在運行過程中,可獲取任意類的任意方法,從而執行任意命令
Hashmap—> transformedmap.decorate —>set value —> checksetvalue —> value transformer.transform

在這裏插入圖片描述
在這裏插入圖片描述
sun.reflect.annotation.AnnotationInvocationHandler —》 read object —> set value

三:觸發方式

xml:xml本身就是序列化對象,通過xmldecoder進行反序列化解析 xmldecode.readobject
Cve-2017-3506
Cve-2017-10271
Cve-2019-2729
Cve-2019-2725

Ysoserial 生成的序列化文件
直接傳送序列化好的payload,觸發相關readobject
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2018-2893

由於weblogic採用黑名單防禦反序列化漏洞的方式,所以上面很多cve都是基於補丁的繞過或者選擇新的反序列化類方法。根據命令執行的調用類的不同,就出現了各種不同的payload,這也是ysoserial存在的原因,具體選用哪種類去生成payload,要根據實際環境來,採用不同payload而已,如cve-2017-3506/10271
Cve-2015-4852/2016-0638

四:參考連接

readobject()爲什麼會執行命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章