XSS LABS - Level 3 过关思路

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

0x01:过关流程

进入靶场,有一个搜索框,老样子,随便输入点东西,查看页面的回显点:

继承 Level 2 的思路,右击页面查看源码,然后 ctrl + f,搜索 123(就是我们刚刚提交的数据):

可以看到,有两处回显点,我们选择针对下面那处配置 Payload,我们尝试闭合掉 input 标签:

 '><script>alert(1)</script>

可以看到,想法有点天真,input 标签也被过滤了,不过也有收获,它并没有过滤',导致后面的内容其实逃逸出来了,我们改变思路,能不能给input标签添加一些属性,来触发 XSS 漏洞。

那么我这里的想法是,给 input 标签增加一个监听事件,当用户鼠标划过该标签时触发 XSS,对应 Payload 如下,可以看到,成功过关:

 ' onmousemove='alert(1)

我们看一下,经过我们 XSS 攻击后页面实际的源码:

本关的不足之处就是还需要用户的协助触发,作者在这里也是想弄一个 0 点击就能触发的事件的,不过菜菜的,没有找到相应的属性(onload 属性在这里无效),对于这些属性的学习,这里提供两个网站 W3Cschool 和 文心一言(其他 AI 也行),下面是他们在本关中为我提供的支持:

0x02:源码分析

下面是 XSS LABS Level 3 的后端源码,以及笔者做的一些笔记:

 <!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 = "level4.php?keyword=try harder!";
         }
     </script>
     <title>欢迎来到level3</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level3</h1>
     <?php
     ini_set("display_errors", 0);
     $str = $_GET["keyword"];
     echo "<h2 align=center>没有找到和" . htmlspecialchars($str) . "相关的结果.</h2>" . "<center>
 <form action=level3.php method=GET>
 <input name=keyword  value='" . htmlspecialchars($str) . "'>
 <input type=submit name=submit value=搜索 />
 </form>
 </center>"; // 相较于 Level 2,它两处都做了过滤,但是, htmlspecialchars 并不会把 ' 也过滤掉,导致出现了 XSS 漏洞
     ?>
     <center><img src=level3.png></center>
     <?php
     echo "<h3 align=center>payload的长度:" . strlen($str) . "</h3>";
     ?>
 </body>
 ​
 </html>

可以看到,目标主要还是用的 htmlspecialchars() 来对回显内容进行过滤,这里笔者偶然间发现了一个问题,此次过关流程是建立在 PHP 5.3.29 版本之上的,切换高版本后,' 号也会被过滤:

也就是说,如果你的靶场运行在 PHP 8.2.10 版本中,上面的攻击方法是无效的。

后面笔者又搜索了 htmlspecialchars() 的简介,发现其可以设置一个标志位来指定过滤的方法:

所以如果将 level 3 中的 htmlspecialchars($str) 替换为,htmlspecialchars($str, ENT_QUOTES),上面的攻击参数就无效了:

0x03:参考资料

PHP: htmlspecialchars - Manual icon-default.png?t=N7T8https://www.php.net/manual/zh/function.htmlspecialchars.phpwindow属性:onmouseover_w3cschool该onmouseover属性返回当前元素的onmouseover事件处理程序代码,当用户将鼠标移动到特定元素上时引发mouseover事件。_来自Fetch API官方文档,w3cschool编程狮。icon-default.png?t=N7T8https://www.w3cschool.cn/fetch_api/fetch_api-hmla2ptm.html文心一言icon-default.png?t=N7T8https://yiyan.baidu.com/chat/4559253804

  • 9
    点赞
  • 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、付费专栏及课程。

余额充值