XSS-Labs 靶场 Level 0-10关卡 WriteUp

server/2025/3/26 9:34:21/

今天,我花了大量时间完成了 XSS-Labs 的所有十关挑战。通过这些练习,我深入学习了如何发现和利用不同类型的跨站脚本(XSS)漏洞。以下是我每一关的具体操作和心得。


第一关:基础反射型 XSS

在这里插入图片描述

在第一关中,目标是通过 URL 参数注入 JavaScript 并弹出一个警告框。我修改了 URL:

?name=<script>alert(1)</script>

提交后,浏览器执行了脚本,弹出了数字“1”。这是我第一次理解反射型 XSS 的原理——用户输入直接被反射到页面上,而没有进行适当的清理。这让我意识到,未经验证的输入是多么危险。
在这里插入图片描述


第二关:闭合属性

在这里插入图片描述
在这里插入图片描述

在第二关中,我发现输入被插入到了 <input> 标签的 value 属性中。尝试直接注入 <script> 失败后,我使用 "> 闭合了 value 属性,并插入了我的恶意代码:

"><script>alert(1)</script>

在这里插入图片描述

成功触发了弹窗。这让我明白,正确闭合属性是绕过过滤的关键。


第三关:事件注入

在这里插入图片描述

第三关中,服务器对双引号和尖括号进行了转义。
在这里插入图片描述

我放弃了 <script> 标签,改用事件处理器(如 onclickonfocus)来触发 JavaScript:

' onclick='alert(1)

提交后,点击输入框时弹出了警告框。这让我认识到,事件注入可以有效绕过对 <script> 的过滤。
在这里插入图片描述


第四关:绕过尖括号过滤

第四关中,服务器完全删除了尖括号(< >)。然而,我发现事件处理器并不需要这些符号。我用双引号闭合属性并添加了 onclick 事件:
在这里插入图片描述

" onclick="alert(1)

成功触发了弹窗。这再次证明,即使是简单的调整也能绕过严格的过滤器。

在这里插入图片描述


第五关:伪协议利用

在这里插入图片描述

第五关中,服务器破坏了 <onclick> 标签(如 <o_nclick>)。
在这里插入图片描述
为了避免 <script>,我使用了 javascript: 伪协议,并将其嵌入到 <a> 标签中:

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

在这里插入图片描述

点击链接后,警告框成功弹出。这让我学会了如何在传统脚本被阻止时,使用替代方法。


第六关:大小写绕过

在这里插入图片描述

第六关中,服务器对 <script><a> 标签都进行了破坏。我注意到 HTML 对大小写不敏感,因此使用混合大小写绕过了过滤:

"><a hrEF="javascript:alert(1)">

在这里插入图片描述

成功触发了弹窗。这让我明白了大小写操作的重要性。


第七关:双写字符串

在这里插入图片描述

第七关中,服务器过滤了 script 字符串。为了绕过这一点,我将字符串加倍:

"><scscriptript>alert(1)</scscriptript>

在这里插入图片描述

过滤器只移除了部分字符串,留下了有效的 <script> 标签。这让我见识到了字符串操作的威力。
在这里插入图片描述


第八关:编码绕过

在这里插入图片描述

第八关要求对 Payload 进行编码以绕过字符限制。服务器对特殊字符(如 <>")进行了编码。
在这里插入图片描述

我使用 HTML 编码工具将 Payload 转换为实体:

在这里插入图片描述

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

提交后,浏览器解码并执行了 JavaScript。这让我认识到编码技术在绕过过滤器中的重要性。
在这里插入图片描述


第九关:关键字检测绕过

在这里插入图片描述

第九关中,服务器要求输入包含合法 URL(如 http://)。为了绕过这一点,我在 Payload 中附加了 http://

java&#115;&#99;&#114;&#105;&#112;&#116;:alert('xsshttp://')

在这里插入图片描述

成功触发了弹窗。这让我学会了如何结合编码和特定要求(如包含 http://)来克服额外检查。


第十关:隐藏字段注入

在这里插入图片描述

最后一关中,我发现某些隐藏字段(如 t_sort)是可利用的。
在这里插入图片描述

通过分析源码,我发现 t_sort 字段的值被动态更新。我构造了一个 Payload 注入恶意 JavaScript:

"><input type="text" onclick="alert(1)">

在这里插入图片描述

提交后,点击输入框时弹出了警告框。这让我认识到,彻底检查 DOM 的每个部分(包括隐藏元素)有多么重要。


XSS-Labs 实践总结与心得

今天,我花了大量时间通过 XSS-Labs 的挑战练习跨站脚本(XSS)漏洞。这次经历让我大开眼界,不仅让我理解了 XSS 的原理,还让我明白了作为一名开发者或安全专家,为什么要学习这些知识。

为什么要学 XSS?

XSS 是最常见的网络漏洞之一,也是最危险的漏洞之一。它允许攻击者向其他用户查看的网页中注入恶意脚本,从而窃取敏感信息,如 Cookie、会话令牌甚至登录凭证。了解 XSS 不仅能帮助开发者编写更安全的代码,还能保护用户免受潜在攻击。今天的实践让我意识到,即使是输入验证或输出编码中的小错误,也可能导致严重的安全问题。

今天我学到了什么?
  1. 理解输入处理

    • 网页上的每个输入框都可能是攻击者的入口点。通过分析数据是如何被处理、反射或存储的,我学会了如何识别可能存在漏洞的地方。
    • 例如,如果用户输入直接嵌入到 HTML 中而没有进行清理,就会为 XSS 提供机会。
  2. 不同类型的 XSS

    • 反射型 XSS:当恶意输入立即返回到响应中时发生(例如通过 URL 参数)。这种类型通常用于钓鱼攻击。
    • 存储型 XSS:当恶意输入被保存在服务器上并稍后显示给其他用户时发生。这种类型更危险,因为它会影响多个受害者。
    • DOM 型 XSS:涉及 JavaScript 操纵 DOM,从而允许恶意脚本执行。这种类型需要仔细检查客户端代码。
  3. 利用漏洞

    • 我练习了将 Payload 注入各种字段——有些是简单的 <script> 标签,而另一些则需要创造性的技巧,比如使用事件处理器(onclickonfocus)或伪协议(javascript:)。
    • 每一关都迫使我思考应用程序如何处理输入和输出,教会我根据特定的过滤机制调整方法。
  4. 上下文的重要性

    • 同样的 Payload 在一个环境下可能有效,但在另一个环境下可能失败,因为浏览器渲染 HTML 或服务器清理输入的方式不同。例如,有些关卡需要使用 "> 转义属性,而另一些则需要使用 HTML 实体编码的 Payload。
  5. 现实世界的影响

    • 通过会话劫持和伪造登录表单的任务,我亲眼看到了攻击者如何窃取 Cookie 或诱使用户泄露其凭证。这些练习突显了保护 Web 应用每一层的重要性。
什么时候用哪种方法?
  • 基本 Payload:如果没有过滤器,从简单的 <script>alert(1)</script> 开始。
  • 事件处理器:如果 <script> 被阻止,使用 onclickonfocus 等事件。这些对于表单或交互元素特别有用。
  • 伪协议:如果处理的是链接或按钮,尝试将 javascript:alert(1) 注入到 href 等属性中。
  • 编码:当特殊字符被过滤或编码时,将你的 Payload 转换为 HTML 实体(例如,&#60; 表示 <)。
  • 盲 XSS:当无法直接看到输出时(例如管理员面板),加载远程脚本来确认执行。
解题思路的关键在哪里?
  1. 分析源代码:始终检查原始源代码以了解输入是如何被处理的。F12 开发者工具在这里非常有用。
  2. 逐步测试:从基本 Payload 开始,根据错误消息或行为变化逐步优化它们。
  3. 适应过滤器:如果 Payload 失败,不要放弃——尝试替代技术,如编码、双写字符串或利用大小写敏感性。
  4. 像攻击者一样思考:要防御 XSS,你必须像攻击者一样思考。假设每个输入都是有害的,直到证明它是安全的。
最终感想

今天的实践不仅仅是解决谜题——更是培养一种专注于安全的思维方式。每一步都强化了一个理念:预防胜于治疗。作为一名开发者,我现在更加重视正确清理输入、验证输出以及实施内容安全策略(CSP)。作为一名安全爱好者,我对继续探索这些概念感到兴奋。

在这里插入图片描述


http://www.ppmy.cn/server/178710.html

相关文章

DeepSeek引爆AIoT革命:华奥系科技领跑“万物智联”时代

2025年&#xff0c;全球AIoT&#xff08;人工智能物联网&#xff09;产业迎来关键拐点——中国AI大模型DeepSeek的横空出世&#xff0c;以“低成本、轻量化、边缘智能”三大特性&#xff0c;彻底打破传统物联网的算力与效率瓶颈。从智慧社区到智慧农业&#xff0c;从工业产线到…

【Go 】Go 语言中的 channel介绍

Go 语言中的 channel 是基于 CSP&#xff08;Communicating Sequential Processes&#xff09;思想实现的通信机制。其核心理念是&#xff1a; 通过通信共享内存&#xff0c;而不是通过共享内存通信 也就是说&#xff0c;应当让不同 goroutine 之间通过传递数据来共享状态&…

Golang开发棋牌游戏中的坑

开发棋牌游戏时&#xff0c;Go 语言的高效并发和简洁语法是非常适合的。然而&#xff0c;在实际开发中仍然会遇到一些常见的“坑”。以下是开发棋牌游戏时可能遇到的问题及其解决方案&#xff1a; 1. 并发与同步问题 问题描述 棋牌游戏通常需要处理大量并发连接和实时交互&…

第13章贪心算法

贪心算法 局部最优求得总体最优 适用于桌上有6张纸币&#xff0c;面额为100 100 50 50 50 10&#xff0c;问怎么能拿走3张纸币&#xff0c;总面额最大&#xff1f;—拿单位价值最高的 只关注局部最优----关注拿一张的最大值拆解-----拿三次最大的纸币 不适用于桌面三件物品&am…

c++高精度减法

我们在计算高精度减法的时候其实和高精度加法是有着异曲同工之处的&#xff0c;唯一需要改变的就是借位的逻辑还有数字大小的逻辑 下来我们来写一写高精度减法 刚开始呢我们还是和高精度加法一样高精度加法&#xff0c;我们需要先反转再计算 代码如下: int main() {string …

selenium(鼠标操作、页面操作、用例设计)

ActionChains类&#xff08;鼠标操作&#xff09; 常用于模拟鼠标的行为&#xff0c;比如单击、双击、拖拽等行为 click(on_elementNone) --- 鼠标单击 double_click(on_elementNone) --- 双击 context_click(on_elementNone) --- 右击…

系统设计类问题回答模板

在系统设计类问题的面试中,一个好的回答不仅仅体现了候选人的技术能力,还能展现其对问题本质的理解、清晰的沟通技巧以及解决方案的条理性和可扩展性。以下是一个通用的回答模板,以及回答技巧、白板演示的指导方法,并会结合实际案例提供一些示例。 一、系统设计类问题回答的…

2025-03-23 学习记录--C/C++-C语言 sprintf()实现将多个值按指定格式拼接成字符串

C语言 sprintf()实现将多个值按指定格式拼接成字符串 举个例子 &#x1f330;&#xff1a;将字符串 “m” 与数字 0、1、2 动态拼接成 “m0”、“m1”、“m2”&#xff1a;&#x1f447;&#x1f3fb; #include <stdio.h> // 包含标准输入输出库&#xff0c;用于使用输入…