国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下)

這篇具有很好參考價值的文章主要介紹了告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

0x01 前言

在前面的文章中介紹了基于CC鏈的反序列化利用方式,并且通過最終調(diào)用Runtime類的exec方法達到命令執(zhí)行的效果。在CC鏈中還可以通過xalan來執(zhí)行命令。

xalan是java操作xml的庫,屬于java內(nèi)置的官方庫之一,在CC鏈中主要用到的是com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl類。與上篇文章中提到的利用鏈不同,xalan最終是通過加載字節(jié)碼來達到代碼執(zhí)行的效果,所以xalan更適合于執(zhí)行語句的場景,利用xalan來植入內(nèi)存馬會比其他鏈更加方便。如果目標同時可以使用多條CC鏈,通常會更傾向于使用xalan相關(guān)的鏈。

往期推薦

1

告別腳本小子系列丨JAVA安全(1)——JAVA本地調(diào)試和遠程調(diào)試技巧

2

告別腳本小子系列丨JAVA安全(2)——JAVA反編譯技巧

3

告別腳本小子系列丨JAVA安全(3)——JAVA反射機制

4

告別腳本小子系列丨JAVA安全(4)——ClassLoader機制與冰蝎Webshell分析

5

告別腳本小子系列丨JAVA安全(5)——序列化與反序列化

6

告別腳本小子系列丨JAVA安全(6)——反序列化利用鏈(上)

7

告別腳本小子系列丨JAVA安全(7)——反序列化利用鏈(中)

0x02 Xalan鏈分析

java.lang.ClassLoader是java中負責類加載的抽象類,類中包含一個特別重要的方法defineClass,defineClass方法接受一組字節(jié),然后將其具體化為一個Class類型實例,它一般從磁盤上加載一個文件,然后將文件的字節(jié)傳遞給JVM,通過JVM(native 方法)對于Class的定義,將其具體化,實例化為一個Class類型實例。目前流行的jsp的webshell冰歇和哥斯拉均是采用這種方式來傳遞的惡意代碼。

在TemplatesImpl類的defineTransletClasses方法中,存在對defineClass方法的調(diào)用,如圖2.1所示。并且傳遞的參數(shù)來源于類私有的屬性_bytecodes。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖2.1 在defineTransletClasses方法中調(diào)用defineClass方法

除了通過defineClass來生成Class對象之外,還需要通過newInstance方法來生成類對應(yīng)的實例。向上查找調(diào)用了defineTransletClasses方法的其他方法,如圖2.2所示。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖2.2 在getTransletInstance方法中調(diào)用了目標方法,并進行實例化

由于getTransletInstance方法是private類型的方法,不利于在反序列化利用鏈中進行調(diào)用,繼續(xù)向上查找調(diào)用了getTransletInstance方法的其他方法,如圖2.3所示。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖2.3 通過newTransformer方法調(diào)用getTransletInstance方法

這里的newTransformer方法已經(jīng)是一個public類型的方法了,可以直接在反序列化利用鏈中進行調(diào)用。但是在TemplatesImpl類中還存在對newTransformer方法調(diào)用的另外的方法,如圖2.4所示。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖2.4 通過getOutputProperties方法調(diào)用newTransformer方法

在TemplatesImpl類中提供了通過defineClass動態(tài)加載字節(jié)碼并進行實例化的方式,這是TemplatesImpl類能夠在多種不同類型反序列化利用鏈中出現(xiàn)的根本原因。并且由于自身內(nèi)部方法間相互調(diào)用的關(guān)系,可以總結(jié)只要滿足下面表的條件之一,則可以達到通過TemplatesImpl類執(zhí)行命令的效果。

表2.1 TemplatesImpl類提供的調(diào)用方式

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

在TemplatesImpl類中調(diào)用對應(yīng)的方法,可以達到命令執(zhí)行的效果,如圖2.5所示。方法一和方法二均能達到一樣的命令執(zhí)行效果。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖2.5 通過TemplatesImpl來執(zhí)行命令

0x03 基于Xalan的CC鏈

在CC3的利用鏈中最終是通過Xalan來執(zhí)行命令,CC3的利用鏈和通過com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter類的構(gòu)造方法來調(diào)用newTransformer方法,達到通過Xalan執(zhí)行命令的效果,如圖3.1所示。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖3.1 在TrAXFilter類的構(gòu)造方法中調(diào)用newTransformer方法

下一步的關(guān)鍵是看如何調(diào)用TrAXFilter類的構(gòu)造方法,ysoserial的作者并沒有直接找TrAXFilter類的構(gòu)造方法調(diào)用,而是通InstantiateTransformer類的transform方法中存在調(diào)用任意類的getConstructor方法來調(diào)用TrAXFilter類。如圖3.2所示。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖3.2 在InstantiateTransformer類的transform方法中調(diào)用TrAXFilter類的構(gòu)造方法?

剩下如何調(diào)用InstantiateTransformer類的transform方法與CC1利用鏈完全一致,如圖3.3所示。這里不對其中完全一致的內(nèi)容再做分析。

告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下),java,安全,jvm

圖3.3 CC3利用鏈和CC1利用鏈對比

除了CC3的鏈以外,還有CC2、CC4、CB鏈均與Xalan有關(guān),Xalan提供了一種執(zhí)行復(fù)雜語句的方式,掌握Xalan鏈有助于編寫高級復(fù)雜的反序列化利用代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-516462.html

到了這里,關(guān)于告別腳本小子系列丨JAVA安全(8)——反序列化利用鏈(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java安全研究——反序列化漏洞之CC鏈

    Java安全研究——反序列化漏洞之CC鏈

    apache?commons-collections組件下的反序列化漏洞,自從該組件被爆出漏洞后,許多安全研究員相繼挖掘到j(luò)ava多種組件的漏洞,危害嚴重。本人也是初學Java審計不久,技術(shù)薄弱,所以在此做一個cc鏈的學習總結(jié),如有錯誤還請大佬指出。 若本文有侵權(quán)行為,請立即私信,將全面修

    2024年02月04日
    瀏覽(29)
  • Java安全 反序列化(1) URLDNS鏈原理分析

    Java安全 反序列化(1) URLDNS鏈原理分析

    開始學習Java反序列化鏈–URLDNS 請?zhí)崆傲私釰ava序列化和反序列化,熟悉Java反射機制 1.判斷是否存在反序列化的點 2.判斷目標是否出網(wǎng) 先上payload 后進行分析 可以觸發(fā)dns請求 1.新建HashMap類 什么是HashMap: 基于哈希表的實現(xiàn)的 Map 接口 HashMap是什么? 是鍵值對映射關(guān)系的集合,可

    2024年04月09日
    瀏覽(26)
  • Java安全之反序列化回顯與內(nèi)存碼

    Java安全之反序列化回顯與內(nèi)存碼

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; import java.util.ArrayList; @WebServlet(“/demoServlet”) public class demoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletEx

    2024年04月15日
    瀏覽(26)
  • 不安全的反序列化(php&java)及漏洞復(fù)現(xiàn)

    不安全的反序列化(php&java)及漏洞復(fù)現(xiàn)

    A8:2017-不安全的反序列化 A08:2021-Software and Data Integrity Failures 為什么要序列化? 序列化, 將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程 ,這種形式大多為字節(jié)流、字符串、json 串。在序列化期間內(nèi),將對象當前狀態(tài)寫入到臨時或永久性的存儲區(qū)。以后,就可以通過從

    2024年02月09日
    瀏覽(33)
  • 【java安全】Log4j反序列化漏洞

    【java安全】Log4j反序列化漏洞

    關(guān)于Apache Log4j Log4j是Apache的開源項目,可以實現(xiàn)對System.out等打印語句的替代,并且可以結(jié)合spring等項目,實現(xiàn)把日志輸出到控制臺或文件等。而且它還可以通過一個配置文件來靈活地進行配置,而不需要修改應(yīng)用的代碼,滿足了大多數(shù)要求。 就是用來打印日志的 漏洞成因

    2024年02月11日
    瀏覽(24)
  • 【優(yōu)化技術(shù)專題】「性能優(yōu)化系列」針對Java對象壓縮及序列化技術(shù)的探索之路

    【優(yōu)化技術(shù)專題】「性能優(yōu)化系列」針對Java對象壓縮及序列化技術(shù)的探索之路

    序列化和反序列化 序列化就是指把對象轉(zhuǎn)換為字節(jié)碼; 對象傳遞和保存時,保證對象的完整性和可傳遞性。把對象轉(zhuǎn)換為有字節(jié)碼,以便在網(wǎng)絡(luò)上傳輸或保存在本地文件中; 反序列化就是指把字節(jié)碼恢復(fù)為對象; 根據(jù)字節(jié)流中保存的對象狀態(tài)及描述信息,通過反序列化重建

    2024年01月22日
    瀏覽(25)
  • 【java安全】原生反序列化利用鏈JDK7u21

    【java安全】原生反序列化利用鏈JDK7u21

    前言 前面我們學習了使用第三方類: Common-Collections 、 Common-Beanutils 進行反序列化利用。我們肯定會想,如果不利用第三方類庫,能否進行反序列化利用鏈呢?這里還真有:JDK7u21。但是只適用于java 7u及以前的版本 在使用這條利用鏈時,需要設(shè)置jdk為jdk7u21 原理 JDK7u21這條鏈利

    2024年02月14日
    瀏覽(21)
  • 小迪安全47WEB 攻防-通用漏洞&Java 反序列化&EXP 生成&數(shù)據(jù)提取&組件安全

    小迪安全47WEB 攻防-通用漏洞&Java 反序列化&EXP 生成&數(shù)據(jù)提取&組件安全

    # 知識點: 1 、 Java 反序列化演示 - 原生 API 接口 2 、 Java 反序列化漏洞利用 -Ysoserial 使用 3 、 Java 反序列化漏洞發(fā)現(xiàn)利用點 - 函數(shù) 數(shù)據(jù) 4 、 Java 反序列化考點 - 真實 CTF 賽題 - 審計分析 # 內(nèi)容點: 1 、明白 -Java 反序列化原理 2 、判斷 -Java 反序列化漏洞 3 、學會 -Ysoserial 工具

    2024年04月10日
    瀏覽(60)
  • Unity——腳本與序列化

    數(shù)據(jù)序列化有以下幾個主要的應(yīng)用場景和目的: 1. 持久化存儲:序列化可以將對象或數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為字節(jié)序列,使得其可以被存儲在磁盤上或數(shù)據(jù)庫中。通過序列化,我們可以將應(yīng)用程序中運行時的數(shù)據(jù)持久化保存,以便在后續(xù)運行時重新加載和使用。 2. 數(shù)據(jù)傳輸:序列化

    2024年01月18日
    瀏覽(17)
  • WEB攻防-Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE

    WEB攻防-Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE

    知識點: 1、Java安全-原生反序列化-3大類接口函數(shù)利用 2、Java安全-SpringBoot攻防-泄漏安全CVE安全 序列化是將Java對象轉(zhuǎn)換成字節(jié)流的過程。而反序列化是將字節(jié)流轉(zhuǎn)換成Java對象的過程,java序列化的數(shù)據(jù)一般會以標記( ac ed 00 05 )開頭,base64編碼的特征為 rO0AB 。 JAVA常見的序列化

    2024年02月03日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包