Advent of Cyber 2025 第11天 攻略: Cross-Site Scripting (XSS) | TryHackMe
Source: Dev.to
理解 XSS
通常网站或 Web 应用会展示来自服务器的信息。但用户也可以通过输入框提供信息。如果 Web 服务器没有正确验证用户输入,恶意代码就可能被注入,取代原本无害的文本。该恶意代码随后会执行,可能窃取凭证、破坏页面或篡改用户信息。
存储型 XSS
存储型 XSS 攻击发生在恶意代码被保存到服务器上(例如,保存在 HTML 或 JS 文件中)。
示例:domain.com/tonybennet 中包含了注入的脚本。随后访问该页面的任何人都会成为受害者,因为代码会对每位访客执行。
反射型 XSS
反射型 XSS 攻击更直接。
示例链接:facebook.com/profile/search?term=alert(1)
如果服务器在未进行过滤的情况下直接返回 term 参数,浏览器在打开链接时就会执行 alert(1)(或任何其他恶意脚本)。
防御 XSS
- 禁用危险的渲染路径:优先使用
textContent而不是innerHTML,将输入视为纯文本而非 HTML。 - 让 Cookie 对 JavaScript 不可访问:为会话 Cookie 设置
HttpOnly、Secure和SameSite属性。 - 对输入/输出进行清理并编码:当允许有限的 HTML(例如安全链接或基本格式)时,对所有用户提供的数据进行清理和编码。这样可以移除或转义可能被解释为可执行代码的元素,如
<script>标签、事件处理器或javascript:URL,同时保留安全的格式。
实战演练 – Advent of Cyber 2025 第 11 天(XSS)
-
启动目标机器
- 如果已启用 OpenVPN,在浏览器中输入目标 IP 地址。
- 否则,启动 TryHackMe 提供的 AttackBox 机器。

-
识别输入框
页面包含两个输入框,每个都易受不同类型的 XSS 攻击。 -
反射型 XSS 测试
在第一个输入框中输入以下负载:alert('Reflected Meow Meow')提交表单后会弹出提示框,确认存在漏洞。

-
获取旗帜
- 该房间非常直接:每个输入框只要提供相应的 XSS 负载,就会显示旗帜。
- 将提供的负载复制粘贴到对应字段,即可获得旗帜。
结论
本房间演示了经典的 反射型 与 存储型 XSS 攻击,并强调了关键的缓解技术,如正确的输出编码、安全的 DOM 操作以及安全的 Cookie 属性。练习这些概念有助于巩固安全编码实践,提高对常见 Web 漏洞的认识。