缓存投毒进阶 -- 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;--->负载电路↑提供足够的电…