xsslab-第九关
·
1右击看一眼页面源码

有链接,大概率是用js绕过,输入javascript:alert(1)

坏消息是连接处显示链接不合法和过滤JavaScript
试了很多方法,看源码发现是有有个strpos()函数,要求必须匹配到http函数。
输入http://javascript:alert(1)看看页面源码

可见就是少了http://而已
输入unicode编码后的javascript:alert(1)
//http://把http://注释掉
javascript:alert(1)//http://

源码分析
<?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>';
?>
<?phpif(false===strpos($str7,'http://'))
{
echo '<center><br><a >友情链接</a></center>';
}
else
{
echo '<center><br data-tomark-pass><a >友情链接</a></center>';
}
?>
-
这部分代码拿到用户输入
$str(全部小写)。 -
依次用
str_replace替换了一些危险关键字(script、on、src、data、href、"),试图防止XSS。 -
最后用
htmlspecialchars($str)转义用户输入放入了<input value="">,相对安全。
更多推荐
所有评论(0)