xss绕过尖括号和双括号_xss挑战平台练习

本文介绍了在学习XSS过程中遇到的一个在线练习平台,详细分析了从Level 1到Level 19的各个关卡的XSS攻击策略,包括如何利用各种编码、事件、标签闭合等方式绕过过滤机制,实现有效payload的构造,以成功触发XSS攻击。
摘要由CSDN通过智能技术生成

-------------------------XSS挑战之旅-------------------------
最近在学习xss,找到了一个xss练习平台,在线地址:http://test.xss.tv/
实验环境也可以本地搭建,不过需要php+mysql的环境:
xss通关小游戏:https://pan.baidu.com/s/1zS2GwTNbMBXEF2yNEBeLgA 密码:85g8
我这里使用本地搭建,方便分析代码,安装好的页面如下:

cc95007a96a7d9727916de19005d9347.png

Level 1:

9d34775bc72b4eb65174186d92d7a872.png


分析一下源代码中的判断xss的代码:

bc206ad103d5fb718b2d035010b3ddac.png


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

bc206ad103d5fb718b2d035010b3ddac.png


根据代码发现,变量$str从url接受一个get类型的name参数,并且没有对传入的name参数进行任何过滤
直接echo出来,我们可以直接构造任意可弹窗payload,
这里使用最基本的:<script>alert(1)</script>,也可以使用 <svg/οnlοad=alert(1)> 等...

3b03e160a207efb1187513829718390f.png


成功过关!Level 2:

09c270ad56d8476e9217652d6ee362c3.png


从图中可以看出这是一个典型的搜索框xss,
分析一下源代码中的判断xss的代码:

bc206ad103d5fb718b2d035010b3ddac.png


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

bc206ad103d5fb718b2d035010b3ddac.png


分析代码,仍然是使用get方法,从url中接受一个keyword参数,不过这里用到一个过滤函数htmlspecialchars(),
这个函数把预定义的字符转换为 HTML 实体,等于<不能用,这时候一种方法是黑名单绕过,就是不使用被过滤的符号,使用js的事件:
payload : " οnclick=alert(1)这样需要点击一下输入框<br>
" οnmοuseοver=alert(1)>需要鼠标划过输入框<br><br>

a4cb00122060df38b47b53da7155f54f.png


另外一种方法就是在构造payload就要将input的文本框本分提前闭合,不影响我们弹框代码,

0230c3bbc13e7d4e8a86a34f83cc9259.png


我这里使用 "><script>alert(1)</script>
这样的话 : <input name="keyword" value=" "><script>alert(1)</script>"
这样value=" ",不会检查我们的弹窗代码

8d3b103946fb2a174ddc96c9a9da64fe.png


成功过关!!!Level 3:

45581c687b0fd099e015f124664fb450.png


分析一下源代码中的判断xss的代码:

bc206ad103d5fb718b2d035010b3ddac.png


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

bc206ad103d5fb718b2d035010b3ddac.png


分析代码发现跟上面大同小异,不过过滤更加严格了,特别是value='".htmlspecialchars($str)."'发现
上题尝试闭合<"">构造<script>弹窗方法失效了,应为value中的<被转义了,只能利用上题中的js时间
来构造弹窗,不过这里需要用单引号闭合,构造payload : ' οnmοuseοver=alert(1)//
这样的话: <input name=keyword value=' ' οnmοuseοver=alert(1)// '>

47dad9ffed0f5bc959cdde583d298fcb.png


闯关成功!!!Level 4:

d6c8cf0ec1e85e5adf4ee440eaef686c.png


分析一下源代码中的判断xss的代码:

bc206ad103d5fb718b2d035010b3ddac.png


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

bc206ad103d5fb718b2d035010b3ddac.png


这里我们看到,我们传入进去的值又经过了两个函数的参与。
函数说明:
Str_repla

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值