Gentle_knife's Studio.

(写了75)XSS+CSP——0xgame2024paste_bin与RCTF2025author

Word count: 601Reading time: 2 min
2025/12/01
loading

因为共同点很多所以把两道题串联起来一起记。

基础知识

“XSS 全称 Cross Site Scripting (因为简称与 CSS 同名,所以改成了 XSS),即跨站脚本攻击,简单来说就是可以在网站页面上执行任意的 JavaScript 代码,进而盗取用户的 Cookie, localStorage 等信息”

沉睡的 Bot

img这两道题目的共同点——同时也是 XSS 的特征之一,就是有一个

  • 初始化就能读取 flag
  • 会无条件点击攻击者给他发的链接,并且之后会沉睡一段时间,
  • 遵守同源策略,只能在题目给定的源中活动
    Bot

这里 sleep 的用意是给攻击留出足够的时间,因为 CSP 绕过或者数据外带都需要加载。

CSP

瀏覽器的安全模型 | Beyond XSS

基于信任域(CDN)的 CSP 绕过

1
2
3
<meta http-equiv="Content-Security-Policy"

content="base-uri 'none'; style-src 'unsafe-inline'; script-src 'self' 'sha256-mDsn/yxO0Kbxaggx7bFdeBmrC22U6cePGEUeeSwO+n0=' cdn.tailwindcss.com unpkg.com cdn.jsdelivr.net;">

script-src :所有 <script> 标签的安全规则:

  • ‘self’:可以加载同源的 JS 文件。
  • ‘sha256-mDsn/yxO0Kbxaggx7bFdeBmrC22U6cePGEUeeSwO+n0=’可以:可以加载哈希值是指定值的脚本。
  • cdn.tailwindcss.com unpkg.com cdn.jsdelivr.net :只要 js 的地址是这两个开头的脚本可以加载。以这个开头的都是 CDN 服务,就是开发者发布的 npm 包都可以通过这两个网址加载。CDN 缓存的源头就是https://www.npmjs.com/,而这个网址上的 npm 包只要注册就可以发布。所以我们自己上传一个有毒的 npm 包把前缀改了就好了。
    这里直接用官方 wp 里面的地址:
    my-package-x1r0z:https://www.npmjs.com/package/my-package-x1r0z
    其unpkg地址为:UNPKG

npm 包里面的 Js 具体内容是根据题目来写的:

1
let js = format!("localStorage.setItem('flag', '{}');", flag);

因为是LocalStorage 里,就写 localStorage.getItem

利用 CSP 屏蔽 WAF->RCTF2025author

这道题里面有一个几乎过滤了所有 XSS 的 js

![[code.png]]
我们可以用 CSP 来以毒攻毒使这个超级强大的 js 失效,

1
'script-src-elem http://localhost:8081/assets/js/article.js;script-src unsafe-inline' http-equiv='Content-Security-Policy'

payload 出场率高的iframe

Iframe (Inline Frame),中文叫“内联框架”,能直接在浏览器里面再开一个窗口。

CATALOG
  1. 1. 基础知识
  2. 2. 沉睡的 Bot
  3. 3. CSP
    1. 3.1. 基于信任域(CDN)的 CSP 绕过
    2. 3.2. 利用 CSP 屏蔽 WAF->RCTF2025author
  4. 4. payload 出场率高的iframe