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

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>

http://www.kler.cn/a/281350.html

相关文章:

  • 结构开发笔记(六):solidworks软件(五):绘制M2x3.0mm螺丝
  • MES系统如何灵活适配多种通信协议及数据采集能力
  • 单向链表和双向链表的一些基本算法
  • XR虚拟拍摄和VP有什么区别
  • git清除所有提交记录及贡献者信息
  • 硬盘数据如何恢复?别慌!5 大策略帮您恢复硬盘数据!
  • Redis缓存分区
  • SAP B1 常用表单的 中英文名称路径(持续更新中)
  • 【C#】【EXCEL】Bumblebee/Classes/ExData.cs
  • 【蓝桥杯省赛真题48】python最大矩形面积 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析
  • 无人机搭载高压喷水清洗绝缘子技术详解
  • 软件设计原则之依赖倒置原则
  • RabbitMQ如何保证消息不丢失(面试版)
  • Oracle(86)什么是索引重建(Index Rebuild)?
  • 【商城源码需要不断升级哪些方面】
  • 游戏引擎详解——图片
  • 快速排序——算法世界的速度传奇
  • 解决 `java.sql.SQLException` 的正确方法
  • 【动态规划】子数组系列一(数组中连续的一段)
  • Spring Boot(八十七):集成opencc4j实现中文简繁转换