XSS LABS - Level 5 过关思路

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

0x01:过关流程

0x0101:过关流程 01

进入关卡,鼠标右击页面,查看网页源码,搜索关键词 find a way out!(页面的默认传参),寻找回显点:

继续使用上一关的 Payload 进行尝试,看看能不能直接过关:

 " onmouseover="alert(1)

分析回显点,发现目标会将 on 替换为 o_n,导致无法注入属性。

有拦截,不要怕,分析一下目标后端的过滤机制,经过笔者的测试,分析出其过滤机制如下:

Test PayloadReturn ResultAnalysis Result
ono_n过滤 on
Ono_n无视大小写
<ScRIPT<scr_ipt过滤 <script
scriptscript不过滤单独的 script

目标后端过滤了 on<script,问题不大,我们还可以利用下面的图片,结合a 标签做个点击触发的 XSS。

我们在浏览器中经常会遇到可以点击跳转的图片,其 HTML 源码基本如下:

 <a href="跳转的链接">
     <img src="图片的来源链接">
 </a>

靶场当前页面下就有一个图片,我们不妨,利用它,也整个点击的 XSS 攻击。经过测试 script 是未被过滤的,所以我们可以编写 XSS Payload 如下(javascript: 这种写法其实就是告诉浏览器,紧跟其后的内容应该被当作javascript代码来执行):

 "><a href="javascript:alert(1)

查看一下攻击成功后的页面源码,分为两个视图,一个是页面源码,一个是开发者工具中的视图:

0x0102:过关流程 02(不符合规则)

首先得申明一下,这个过关思路并不能过关,但是确实能触发 XSS 漏洞,所以写在这里。

这个是我在卡关时,到处搜索 XSS 绕过时发现的一个技巧,其 Payload 如下,我给他加工了一下,使其不那么明显:

 "><iframe src=javascript:alert(1); width="0px" height="0px"></iframe><input hidden style="text

该攻击方法,是利用 iframe 框架,它会引用其他站点的内容到本站点(自动执行),我们将引用数据改成触发 XSS 攻击的内容即可,后面的修改 width 和 height,以及拼接 input 啥的,都是我为了让其不那么显眼而做的加工而已。(由上图可知,出发了弹窗,但是没有进入下一关)

这里我修改后端 PHP 代码,让后端为每个访问该页面的人添加一个 Cookie,修改 Level 5 的内容如下:

访问 Level 5 关卡,打开开发者工具,在控制台中看能否取出 cookie 内容:

可以看到,我们添加的 Cookie,能成功回显。这个时候把我们下面的 Payload 传递过去,看看能不能获取当前页面的 Cookie 值:

 "><iframe src=javascript:alert(document.cookie); width="0px" height="0px"></iframe><input hidden style="text

如上,可以看到,成功完成了 XSS 攻击,还不需要用户参与。我个人是觉得更符合规则的,但是,其无法进入到下一关,所以是不符合关卡创作者的意图的。当个扩展吧。

0x02:源码分析

下面是 XSS Level 5 的后端代码,以及我对其的部分笔记(跟我们上面分析出来的是完全吻合的,俺也是第一次硬做的,并没有开上帝视角):

 <!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 = "level6.php?keyword=break it out!";
         }
     </script>
     <title>欢迎来到level5</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level5</h1>
     <?php
     ini_set("display_errors", 0);
     $str = strtolower($_GET["keyword"]); // 将 keyword 传递过来的值,全部变成小写,杜绝了你大小写绕过的可能
     $str2 = str_replace("<script", "<scr_ipt", $str); // 将 <script 替换为 <scr_ipt
     $str3 = str_replace("on", "o_n", $str2); // 将 on 替换为 o_n,防止 XSS 为元素添加属性的可能
     echo "<h2 align=center>没有找到和" . htmlspecialchars($str) . "相关的结果.</h2>" . '<center>
 <form action=level5.php method=GET>
 <input name=keyword  value="' . $str3 . '">
 <input type=submit name=submit value=搜索 />
 </form>
 </center>';
     ?>
     <center><img src=level5.png></center>
     <?php
     echo "<h3 align=center>payload的长度:" . strlen($str3) . "</h3>";
     ?>
 </body>
 ​
 </html>

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值