緩存投毒進階 -- justctf 2025 Busy Traffic

題目核心邏輯如下

let browser; // 全局瀏覽器實例// 訪問指定 URL 的異步函數
const visit = async (url) => {try {// 如果已有瀏覽器實例,先關閉并等待 2 秒if (browser) {await browser.close();await sleep(2000);console.log("Terminated ongoing job.");}// 啟動 puppeteer,使用 chrome,無頭模式browser = await puppeteer.launch({browser: 'chrome',headless: true,args: ["--disable-features=HttpsFirstBalancedModeAutoEnable","--no-sandbox"]});// 創建新的瀏覽器上下文const ctx = await browser.createBrowserContext();// 新建頁面,訪問 flag 頁面并設置 localStoragepage = await ctx.newPage();await page.goto(`http://traefik/flag`, { timeout: 3000, waitUntil: 'domcontentloaded' });await page.evaluate((flag) => {localStorage.setItem('flag', flag); // 將 flag 存入 localStorage}, FLAG);await sleep(500); // 等待 0.5 秒await page.close(); // 關閉頁面// 新建頁面,訪問用戶提交的 URLpage = await ctx.newPage();await page.goto(url, { timeout: 3000, waitUntil: 'domcontentloaded' });await sleep(1000 * 60 * 2); // 停留 2 分鐘await browser.close(); // 關閉瀏覽器browser = null;} catch (err) {// 捕獲并打印異常console.log(err);} finally {// 最終關閉瀏覽器并打印日志console.log('close');if (browser) await browser.close();}
};
http:routers:bot:rule: 'PathPrefix(`/bot`)'service: botdashboard:rule: "PathPrefix(`/dashboard`) || PathPrefix(`/api`)"service: api@internalservices:bot:loadBalancer:servers:- url: "http://bot:3000"middlewares:cache-on-steroids:plugin:plugin-simplecache:path: /tmp/CacheQueryParams: Truemaxage:headers:customResponseHeaders:Cache-Control: "max-age=20"coop:headers:customResponseHeaders:Cross-Origin-Opener-Policy: "same-origin"
log:level: INFOaccessLog: {}entryPoints:web:address: ":80"http:middlewares:- maxage- coop- cache-on-steroidsproviders:file:filename: /config/dynamic.ymlapi:dashboard: trueexperimental:plugins:plugin-simplecache:moduleName: "github.com/scrazy77/plugin-simplecache-nocache"version: "v0.0.5"

服務器使用了此插件,插件存在默認不安全行為,忽略查詢參數作為緩存判斷的關鍵

// Config 配置中間件的結構體。
type Config struct {Path               string   `json:"path" yaml:"path" toml:"path"`                         // 緩存文件存儲路徑MaxExpiry          int      `json:"maxExpiry" yaml:"maxExpiry" toml:"maxExpiry"`          // 緩存最大過期時間(秒)Cleanup            int      `json:"cleanup" yaml:"cleanup" toml:"cleanup"`                // 清理周期(秒)AddStatusHeader    bool     `json:"addStatusHeader" yaml:"addStatusHeader" toml:"addStatusHeader"` // 是否添加緩存狀態頭CacheQueryParams   bool     `json:"cacheQueryParams" yaml:"cacheQueryParams" toml:"cacheQueryParams"` // 是否緩存查詢參數ForceNoCacheHeader bool     `json:"forceNoCacheHeader" yaml:"forceNoCacheHeader" toml:"forceNoCacheHeader"` // 是否強制添加 no-cache 頭BlacklistedHeaders []string `json:"blacklistedHeaders" yaml:"blacklistedHeaders" toml:"blacklistedHeaders"` // 黑名單頭部,命中則不緩存
}// CreateConfig 返回一個默認配置實例。
func CreateConfig() *Config {return &Config{MaxExpiry:          int((5 * time.Minute).Seconds()), // 默認最大過期時間5分鐘Cleanup:            int((5 * time.Minute).Seconds()), // 默認清理周期5分鐘AddStatusHeader:    true,                             // 默認添加緩存狀態頭CacheQueryParams:   false,                            // 默認不緩存查詢參數ForceNoCacheHeader: false,                            // 默認不強制 no-cacheBlacklistedHeaders: []string{},                       // 默認無黑名單頭部}
}

可以通過使用?Host: traefik?標頭發送請求來在?http://traefik?上執行緩存中毒。如果服務器后端沒有正確處理host頭,緩存中毒有可能使得攻擊者憑空捏造出內部內部可訪問的url(http://fake/)

可以通過使用?Host: traefik?標頭發送請求來在?http://traefik?上執行緩存中毒。

緩存鍵僅由 HTTP?方法、主機名和路徑組成,默認情況下甚至不包括查詢參數緩存鍵完全忽略了?Range?請求頭,這意味著具有不同/沒有 Range 的請求會命中相同的緩存條目

// cacheKey 生成緩存鍵。
func (m *cache) cacheKey(r *http.Request) string {if m.cfg.CacheQueryParams {return r.Method + r.Host + r.URL.Path + r.URL.RawQuery // 包含查詢參數}return r.Method + r.Host + r.URL.Path // 不包含查詢參數
}

我們只需想辦法配合題目不緩存參數的錯誤從服務器上湊齊如下“ROP”的方法即可

<iframe src="URL" name="XSS_payload">
Gadget 代碼作用
e=this拿到全局對象
t=e.name讀取 window.name
i=t復制變量
s=2設置延時
setTimeout(i,t,s)執行 XSS

我們還可以利用這一點使得不同的路徑返回同一文件的不同部分

http://a/b/c.txt?/../d.txt -> http://a/d.txt

配合題目不緩存參數的錯誤,想辦法湊出即可

Default-qPSf0Yui.js/..%2f..%2f/#/udp/a?加載?index-BH-fqmTU.js?和?api-DHmvWmr7.js,而?#/udp/routers?加載更多模塊。

完整利用腳本

繁忙的交通 |justCTF 2025 — Busy Traffic | justCTF 2025

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92786.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

復刻蘇寧易購(移動端)

html代碼<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel"s…

Scrapy返回200但無數據?可能是Cookies或Session問題

引言 在使用Scrapy框架進行網頁爬取時&#xff0c;開發者可能會遇到一個常見但令人困惑的問題&#xff1a;HTTP請求返回狀態碼200&#xff08;表示成功&#xff09;&#xff0c;但實際獲取的數據卻是空的。這種情況通常意味著目標服務器接受了請求&#xff0c;但由于某些原因沒…

【gateway nc adapter虛擬網卡 win11 聯想】問題的解決

前言&#xff1a;由于需要登錄公司內網&#xff0c;于是啟用奇安信VPN。但啟動后報出網關未連接的問題&#xff0c;于是我檢查了我的網絡適配器&#xff0c;并嘗試解決&#xff0c;以下給出幾種我實踐過程中的行動&#xff0c;并附帶最后成功的解決方法 【gateway nc adapter虛…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的運營策略創新研究

摘要&#xff1a;在數字化商業生態快速演進的背景下&#xff0c;傳統運營模式面臨用戶增長乏力、轉化效率低下等挑戰。本文以開源AI智能名片鏈動21模式與S2B2C商城小程序的深度融合為研究對象&#xff0c;提出通過周期化運營規劃、關鍵節點策略設計、跨部門協同創新、數據驅動決…

smart-water表設計方案

-- -- 2. SOP 管理模塊 -- -- 2.1 SOP主表 (存儲SOP元數據&#xff0c;與版本分離) CREATE TABLE sops (id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),name VARCHAR(255) NOT NULL,description TEXT,latest_published_version_id UUID, -- 外鍵約束在版本表創建后添加crea…

A4.0:繼C5.2的BJT理論引申的開關作用的應用示例

在C5里知道了BJT的靜態工作點Q的計算方式&#xff08;IC和VCE的負載線&#xff09;&#xff0c;以及偏置電阻RB&#xff0c;得到了電流IB&#xff0c;進而通過電流增益hFE得到了IC(IC β*IB)&#xff0c;然后VCE VCC - IC*RC&#xff0c;即集電極和發射極之間的電壓等于集電極…

平板探測器的主要技術指標

平板探測器(Flat-panel-detector,FPD)是一種廣泛應用于醫學影像學(如X射線、CT掃描等)、工業無損檢測和科學研究中的成像設備。其主要技術指標包括以下幾個方面: 1.空間分辨率(SpatialResolution) 定義:空間分辨率是指平板探測器能清晰分辨圖像中細節的能力。一般以…

從蘇州姑蘇區人工智能大模型基礎設施招標|學習參數5:單顆 AI 處理器的內存帶寬如何達到 1600GB/s

招標參數5:配置≥8 個AI 處理器,支持OAM式集成服務器形式。單個 AI 處理器支持≥370TFLOPS@FP16或 80TFLOPS@FP32 算力,支持≥64GB HBM高帶寬內存,單個AI處理器內存帶寬≥1600GBps 單張卡算力及內存帶寬參考如下NVIDIA算力表 H3C R4900 G5:支持多達 32 個 DDR4 內存,速率…

【機器學習深度學習】Embedding 模型詳解:從基礎原理到實際應用場景

目錄 前言 一、Embedding 模型基礎&#xff1a;文本到向量的“魔術師” 1.1 什么是 Embedding&#xff1f; 1.2 為什么需要 Embedding&#xff1f; 二、核心作用與優勢&#xff1a;語義分析的“利刃” 三、工作原理拆解&#xff1a;從訓練到應用的完整鏈條 3.1 訓練階段…

防御保護10

雙機熱備組網配置主備備份組網1、配置ip地址2、配置安全區域3、ospf配置4、配置雙機熱備5、安全策略hrp adjust ospf-cost enable --- 配置根據VGMP狀態調整OSPF Cost值如果防火墻下行設備為三層設備&#xff0c;通過路由來引導流量&#xff0c;則需要配置上述命令&#xff1b;…

Python爬蟲實戰:研究meshio庫,構建網格文件數據采集系統

一、引言 (一)研究背景 在有限元分析、計算流體力學(CFD)、計算機輔助設計(CAD)等領域,網格文件是描述幾何模型離散化信息的基礎數據載體,包含節點坐標、單元連接關系、物理屬性等關鍵信息。目前,網格文件格式多達數十種(如 VTK、STL、OBJ、ANSYS CDB 等),且分散…

編程基礎之字符串——統計數字字符個數

題目&#xff1a; 輸入一行字符&#xff0c;統計出其中數字字符的個數。 輸入&#xff1a; 一行字符串&#xff0c;總長度不超過255。 輸出&#xff1a; 輸出為1行&#xff0c;輸出字符串里面數字字符的個數。 樣例輸入&#xff1a; Peking University is set up at 1898. 樣…

Openlayers基礎教程|從前端框架到GIS開發系列課程(19)地圖控件和矢量圖形繪制

1. 地圖控件本篇教程主要介紹以下地圖控件&#xff1a;視圖跳轉控件放大縮小控件全屏控件實現步驟1. 初始化地圖上一篇已經介紹了&#xff0c;這一篇直接跳過該步驟。2. 視圖跳轉控件/* 視圖跳轉控件 */const ZoomToExtent new ol.control.ZoomToExtent({ extent: [110, 30, …

A#語言詳解

A#語言詳解&#xff1a;連接Ada與.NET的安全編程語言一、引言&#xff1a;A#的定義與起源A#&#xff08;A Sharp&#xff09;是一種基于.NET框架的編程語言&#xff0c;其設計目標是將Ada語言的安全性、可靠性與.NET生態系統的跨平臺能力、組件化特性相結合。它由美國程序員Mic…

2025華數杯比賽還未完全結束!數模論文可以發表期刊會議

2025華數杯比賽還未完全結束&#xff01; 數模論文可以發表期刊會議數學建模論文轉化為可發表的期刊/會議論文&#xff0c;可以在保持實驗數據和結果不變的前提下&#xff0c;對論文結構、表述方式和學術規范進行系統性調整&#xff0c;然后進行投稿。 這不僅能讓你的研究成果被…

SSH遠程連接TRAE時顯示權限被拒絕檢查方案

1. 檢查并修復SSH服務端配置&#xff08;Ubuntu端&#xff09; # 編輯SSH配置文件 sudo nano /etc/ssh/sshd_config# 確保以下配置正確&#xff1a; PasswordAuthentication yes # 啟用密碼認證 PubkeyAuthentication yes # 啟用密鑰認證 PermitRootLogin yes …

浙大高飛團隊新作:提出層級式探索框架,讓「地空雙模」機器人自主決策“飛”或“走”

導讀 在面對復雜未知環境的自主探索任務中&#xff0c;如何在有限的能源與時間條件下實現高效、全面的場景感知&#xff0c;一直是機器人研究中的重要難題。近期&#xff0c;浙大高飛老師團隊一項關于“地空雙模機器人”的研究給出了新答案。 相比傳統單一形態的機器人&#xf…

驅動電路設計

一、理論基礎1.1定義驅動電路時位于控制電路和負載&#xff08;主&#xff09;電路之間&#xff0c;用來對控制電路的信號進行放大的中間電路。控制電路----&#xff08;控制信號&#xff09;--->驅動電路----&#xff08;驅動信號&#xff09;--->負載電路↑提供足夠的電…