XSS LABS - Level 10 过关思路

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

0x01:过关流程

进入关卡,右击页面查看网页源码,搜索关键字well done!,查看页面回显点:

可以发现,页面有隐藏的元素,我们想办法让其在页面显示。

回归靶场页面,右击,检查,打开开发者工具,定位到隐藏的标签位置,将 hidden 去掉即可:

删除后,页面会多三个框框,但是无法提交数据,简单,我们自己写一个提交按钮就可以了:

编辑完成后点击一下其他部分的代码,就可以退出了:

可以看到,下面就是修改后的页面,多了三个框框,和一个提交按钮:

这里不浪费时间了,直接点击提交按钮,查看发送出去的请求:

可以发现,点击提交后,我们给后端传递了三个参数,这三个参数的 key,正好对应隐藏字段的 name 值,所以,如果懂前端发送请求流程的化,上面修改代码让按钮显现啥的都不要做,直接在 URL 中拼接参数请求即可(我们每次请求都会刷新页面,而我们在当前页面编辑的 HTML 是不长久的,每次重新请求后就会覆盖我们修改的内容,所以上面的修改方法,只是为了来发现,后端以怎样的格式来接收前端的请求)。

我们给三个参数分别传值,看看哪个会回显回页面:

 ?t_link="NO1"&t_history="NO2"&t_sort="NO3"

既然 t_sort 的值会返回,那么其他参数就无用了,直接删除。而针对返回位置,我们尝试闭合 input 标签,并注入 XSS 代码:

 ?t_sort="><script>alert(1)</script>

可以发现页面有一些简单的过滤,下面整理一下页面的过滤规则:

PayloadEcho Print
<
>
""

双引号没有被过滤,那就利用双引号逃逸出 value 值,然后因为标签是 hidden 的,这样会导致我们无法触发标签的事件监听,所以我们还需要覆盖掉标签的 hidden 属性,所以 Payload 如下:

 ?t_sort=" onmousemove="alert(1)" type="

0x02:源码分析

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

 <!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 = "level11.php?keyword=good job!";
         }
     </script>
     <title>欢迎来到level10</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level10</h1>
     <?php
     ini_set("display_errors", 0);
     $str = $_GET["keyword"];    // 接收以 GET 方式传递过来的 keyword 的内容
     $str11 = $_GET["t_sort"];   // 接收以 GET 方式传递过来的 t_sort 的内容
     $str22 = str_replace(">", "", $str11);
     $str33 = str_replace("<", "", $str22);
     echo "<h2 align=center>没有找到和" . htmlspecialchars($str) . "相关的结果.</h2>" . '<center>
 <form id=search>
 <input name="t_link"  value="' . '" type="hidden">
 <input name="t_history"  value="' . '" type="hidden">
 <input name="t_sort"  value="' . $str33 . '" type="hidden">
 </form>
 </center>'; // 将 t_sort 传入的内容,过滤掉 <> 后,回显,导致了 XSS 漏洞(" 号未被过滤)
     ?>
     <center><img src=level10.png></center>
     <?php
     echo "<h3 align=center>payload的长度:" . strlen($str) . "</h3>";
     ?>
 </body>
 ​
 </html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SRC_BLUE_17

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

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

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

打赏作者

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

抵扣说明:

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

余额充值