<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>

    CVE-2020-28653-如何繞過反序列化漏洞補丁-Zoho ManageEngine OpManager

    VSole2021-11-10 05:56:59

    引言

    CVE-2020-28653漏洞官方通報:

    這是一個未授權的反序列化漏洞,評分為7.5分,初步感覺可能缺少Gadget,導致無法實現RCE。但分析后發現可以找到RCE Gadget。此外CVE-2020-28653補丁修復存在缺陷,導致很容易被繞過,形成新的RCE漏洞CVE-2021-3287。

    反序列化流程

    關注`SUMCommunicationServlet`接口:

    `doPost`函數:

    進入`process`函數:

    對傳入的參數進行一系列處理后,進入`processSumPDU`函數:

    跟進`SUMPDU.deSerializePDU`函數:

    直接進行了反序列化操作。

    參數構造

    `requestHandler`賦值如下:

    回到`doPost`函數,如果要進入`requestHandler.process`的處理流程,必須滿足獲取的`requestHandler`非空。這里我們看下與SUM相關的另一個接口`SUMHandShakeServlet`:

    在處理POST請求時,會對相應的session會話的`requestHandler`進行賦值,只需要提交的參數滿足反序列化后為1002即可。那么可以自己編寫代碼完成構造。

    發送請求后,會生成一個session:

    該session含有`requestHandler`信息,可以在后續請求中帶上該session:

    這樣就進入了`requestHandler.process`函數。下面嘗試構造序列化參數,進入`requestHandler.process`函數。

    首先需要從數據流中反序列化得到一個整數`length`,然后讀取序列化數據傳入`ProcessSumPDU`函數。這就意味著首先需要在序列化payload前面加入一個整數類型的長度信息.。查看下 `DataInputStream.readInt`:

    可以通過`DataOutputStream.writeInt`進行構建:

    Gadget構造

    按照上面分析過程,很容易構造DNSlog Gadget進行驗證嘗試:


    在所有引用的jar包中發現了`commons-beanutils.jar`,但是沒有`commons-beanutils`,在前面的分析文章中提到過`Click1`利用鏈:

    【經典回顧系列】 Java反序列化之ForgeRock OpenAM CVE-2021-35464漏洞分析
    QCyber,公眾號:且聽安全【經典回顧系列】 Java反序列化之ForgeRock OpenAM CVE-2021-35464漏洞分析

    可以參考上文利用`Click1`構造出RCE Gadget ,具體實現這里不再重復贅述。同時由于系統是運行在Tomcat之上的,可以利用Tomcat實現命令回顯:

    補丁繞過分析

    反序列化過程增加了白名單驗證,`ITOMObjectInputStream#resolveClass`函數如下:

    這里修復存在隱患,因為只有`classResolved`為`false`的時候,才會進行白名單檢查,也就是說如果存在一個`ITOMObjectInputStream`對象連續多次`readObject`的話,由于`classResolved`在第一次反序列化時已經賦值為`true`,所以后面的反序列化操作存在繞過可能性,漏洞CVE-2021-3287就是這個原理。

    繼續分析`SUMHttpRequestHandler#processSumPDU`函數,CVE-2020-28653通過`deSearialPDU`完成反序列化觸發,繼續往下走發現還存在一個`sockClient.process`函數:

    進入`sockClient.process`函數:

    正好滿足多次進行反序列化的要求,從而可以繞過CVE-2020-28653漏洞補丁。后面數據包構造具體過程與前面類似,這里就不過多贅述,有興趣的小伙伴可以自行研究。

    序列化zoho
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    未授權的反序列化漏洞,評分為7.5分,初步感覺可能缺少Gadget,導致無法RCE。但分析后發現可以找到RCE Gadget。此外CVE-2020-28653補丁修復存在缺陷,導致很容易被繞過,形成新的RCE漏洞CVE-2021-3287。
    本倉庫所涉及的技術、思路和工具僅供安全技術研究,任何人不得將其用于非授權滲透測試,不得將其用于非法用途和盈利,否則后果自行承擔。
    根據國家信息安全漏洞庫統計,2021年8月份采集安全漏洞共1911個。合計1633個漏洞已有修復補丁發布,本月整體修復率85.45%。截至2021年08月31日,CNNVD采集漏洞總量已達167566個。總體來看,本月整體修復率,由上月的88.29%下降至本月的85.45%。
    在我們之前的文章中,我們討論了 DNS 的基礎知識。在本文中,我們將介紹一些 DNS 冗余的高級技術: 主域名解析托管一個或多個區域的主 DNS 服務器充當權威 DNS,DNS 管理員通過該服務器管理區域文件并執行 DNS 更改,例如添加、刪除和更新 DNS 記錄。 區域和區域文件DNS 服務器中托管的域稱為區域。區域文件是人類可讀的文本文件,其中包含不同類型的 DNS 記錄。
    Java安全中Groovy組件從反序列化到命令注入及繞過和在白盒中的排查方法
    最近兩個月我一直在做拒絕服務漏洞相關的時間,并收獲了Spring和Weblogic的兩個CVE但DoS漏洞終歸是雞肋洞,并沒有太大的意義,比如之前有人說我只會水垃圾洞而已,所以在以后可能打算做其他方向早上和pyn3rd師傅聊天
    淺談Java反序列化漏洞
    2022-05-17 17:48:01
    Java序列化與反序列化Java 提供了一種對象序列化的機制,該機制中,一個對象可以被表示為一個字節序列,該字節序列包括該對象的數據、有關對象的類型的信息和存儲在對象中數據的類型。反序列化就是打開字節流并重構對象。對象序列化不僅要將基本數據類型轉換成字節表示,有時還要恢復數據。
    java序列化與反序列化
    2022-04-13 16:35:35
    java反序列化指字節序列恢復到java對象。bit,則一個字最大為 FFFF。序列化是把對象轉換成有序字節流,以便在網絡上傳輸或者保存在本地文件中。序列化后的字節流保存了Java對象的狀態以及相關的描述信息。序列化機制的核心作用就是對象狀態的保存與重建。
    序列化漏洞匯總
    2022-01-07 22:17:34
    漏洞出現在WLS Security組件,允許遠程攻擊者執行任意命令。攻擊者通過向TCP端口7001發送T3協議流量,其中包含精心構造的序列化Java對象利用此漏洞。然后將其序列化,提交給未做安全檢測的Java應用。Java應用在進行反序列化操作時,則會觸發TransformedMap的變換函數,執行預設的命令。
    序列化的核心思維旨在,將A變成B,最后再從B還原回A。 總之,在一些條件苛刻或者變化無常的環境與需求中,產生了這種靈活的可逆性的B的中間體。 理解不安全反序列化的最好方法是了解不同的編程語言如何實現序列化和反序列化。這里的序列化與反序列化指的是程序語言中自帶的實施與實現。而非自創或者自定義的序列化與反序列化機制(比如:N進制形式hashmap樹型等其他數據結構里的序列化中間體)。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类