XSS LABS - Level 16 过关思路

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客

0x01:过关流程

进入靶场,右击页面,查看网页源码,搜索关键词 test 查看页面回显点:

页面只有一个回显点,跟前面关卡不同,回显点没有以属性的形式出现在标签内部,而是出现在了标签外部,像这种位置,想要触发 XSS 攻击,似乎只能依靠构造新的标签来触发了(最好的情况就是 <script> 标签未被过滤)。

不清楚目标后端是否做了过滤,就整个 Payload 大杂烩,看看目标后端都过滤了哪些内容:

 <sCrIpt>alert(1)</sCrIpt><a hRef="javaScript:alert(1)" onmouseover="alert(2)" onOnmouseover="alert(3)">test</a>

下面梳理一下目标后端的过滤规则:

PayloadEcho Print
<<
>>
script&nbsp;,且忽略大小写
空格&nbsp;
""

看来目标主要就是把标签之间的空格替换为了 &nbsp; ,并没有拦着我们构造标签,说到底,就是要绕过空格。首先传入一个基础的 Payload 看看效果:

 <input type="text" onmouseover="alert(1)">

那么我们下面就是去找,什么符号能够替代空格,来让标签依旧生效。而这个符号嘞,不一定是可见的。

测试方法也很简单,但是需要用到 BurpSuite(这款工具,在安全圈里非常出名,可以说是人手一个,教程我后续也会出哦,这里直接讲用法)。

首先,打开 BurpSuite,并打开 BurpSuite 中自带的浏览器:

使用 BurpSuite 自带的浏览器访问 XSS LABS Level 16 靶场,找到请求包,并发送到请求包模块:

 http://127.0.0.1/xss-labs/level16.php?keyword=%3Cinput+type=%22text%22+onmouseover=%22alert(1)%22%3E

下面定位到 Intruder 模块,并且修改请求包的内容,我们要把 + 号变成 %xx 的形式:

然后进入 Payload 中,按照如下格式进行配置,并开始攻击:

这个时候 BurpSuite 会弹出一个框框,告诉你攻击的结果,我们可以查看每个攻击返回的内容,找到能成功显示 input 标签的即可,如下图:

这种能替换空格的标签还不少,作者这里根据本次攻击结果列举一下(有心者可以做成字典哦):

 能成功显示的:%0a、%0c、%0d
 不太稳定的:%3e

那么本关的过关 Payload 如下:

 <input%0atype="text"%0aonmouseover="alert(1)">

0x02:源码分析

下面是 XSS LABS Level 16 的后端源码,以及我对其的部分笔记:

 <!DOCTYPE html><!--STATUS OK-->
 <html>
 ​
 <head>
     <meta http-equiv="content-type" content="text/html;charset=utf-8">
     <script>
         // 修改 alert 默认行为,进入下一关
         window.alert = function() {
             confirm("完成的不错!");
             window.location.href = "level17.php?arg01=a&arg02=b";
         }
     </script>
     <title>欢迎来到level16</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level16</h1>
     <?php
     ini_set("display_errors", 0);
     $str = strtolower($_GET["keyword"]);    // 接收通过 GET 方式传入的 keyword
     $str2 = str_replace("script", "&nbsp;", $str);  // 将 script 替换为 &nbsp;
     // 下面都是一些常见的过滤形式,没啥。
     $str3 = str_replace(" ", "&nbsp;", $str2);
     $str4 = str_replace("/", "&nbsp;", $str3);
     $str5 = str_replace("   ", "&nbsp;", $str4);
     echo "<center>" . $str5 . "</center>"; // 忽略了,有一些不可显示的字符也可以用作空格,进行绕过
     ?>
     <center><img src=level16.png></center>
     <?php
     echo "<h3 align=center>payload的长度:" . strlen($str5) . "</h3>";
     ?>
 </body>
 ​
 </html>
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SRC_BLUE_17

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

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

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

打赏作者

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

抵扣说明:

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

余额充值