XSS LABS - Level 5 过关思路

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

0x01:过关流程

0x0101:过关流程 01

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

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

" onmouseover="alert(1)

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

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

Test Payload Return Result Analysis Result
on o_n 过滤 on
On o_n 无视大小写
<ScRIPT <scr_ipt 过滤 <script
script script 不过滤单独的 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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容