XSS-Labs之Level0-10

level 0

靶场搭建

下载至phpstudy中的WWW目录。

下载地址:

代码语言:javascript
复制
git clone https://github.com/do0dl3/xss-labs.git

打开phpstudy,启动MySQLApache服务。创建网站,根目录选择下载的文件。之后打开网站即可。

level 1

没有任何过滤

在源码中找到我们传入的参数,发现插入到了元素<h2>中。直接给我们的name参数赋值一个简单的弹窗脚本,执行成功。这一关没有任何过滤,非常基础的反射型XSS。

level 2

htmlspecialchars() 插入点在元素的属性

按照第一题的思路,直接传参<script>alert(/xss/)</script>,发现没有跳出弹窗。查看源代码发现我们的传递的参数被HTML实体编码了。

继续检查源代码,发现我们提交的参数赋值给了<input>元素的value,所以这里我们可以通过提前闭合,利用on事件执行一个简单的弹窗。

传递参数1" onmouseover="alert(/xss/),查看源码发现拼接成功。鼠标移动到该元素上跳出弹窗。

level 3

类似level 2

与level 2有些许不同,构造参数1' onmouseover='alert(/xss/),查看源码发现拼接成功。同level 2跳出弹窗。

level 4

无意思 和level 2构造同样的参数即可

level 5

on事件被过滤,拼接创建新元素,利用JavaScript伪协议

继续使用上一关的参数,发现被过滤了on事件。

这个元素没办法拼接代码的话,那么通过构造参数新建一个元素来执行代码。构造参数1"><a href="javascript:alert(/xss/)">click!</a><img src=",这里没有过滤掉javascript,查看源代码发现拼接成功,点击click!即可跳出弹窗。

level 6

大小写绕过

传入1" onmouseover="alert(/xss/),发现on被过滤了。

继续尝试1"><a href="javascript:alert(/xss/)">click!</a><img src=",发现href也被过滤了。

尝试大写绕过1"><a HREF="javascript:alert(/xss/)">click!</a><img src=",发现代码拼接成功.点击click!>即可跳出弹窗。

level 7

双写关键字

尝试参数1" onmouseover="alert(/xss/)on又双叒叕被过滤了。

尝试创建新元素1"><a href="javascript:alert(/xss/)">click!</a><img src=",也不行。

尝试双写关键字,拼接成功,跳出弹窗。

level 8

javascript伪协议+HTML实体编码绕过

随便上传一个链接。

尝试下javascript伪协议。拼接的时候发现被插入了一个空格。尝试大写绕过,也不行。

试试HTML实体编码绕过。

代码语言:javascript
复制
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#47;&#41;

拼接成功,点击弹出窗口。

level 9

类似level 8

随便传入一串字符,发现不符合格式,需要http://才能成功传入。构造参数javascript:alert(/xss/)//http://,发现和level 8一样在script中间插入了一个空格,直接尝试HTML实体编码绕过,拼接成功,点击后弹出窗口。

level 10

隐藏表单

检查源代码,发现有隐藏的输入框。同时给这些变量传值。

代码语言:javascript
复制
<form id="search">
	<input name="t_link" value="" type="hidden">
	<input name="t_history" value="" type="hidden">
	<input name="t_sort" value="" type="hidden">
</form>
代码语言:javascript
复制
http://xss-labs/level10.php?keyword=well done!&t_link=a&t_history=b&t_sort=c

只有t_sort变量被赋值了。尝试传参重构这个元素。参数为1" type="" onmouseover="alert(/xss/)

拼接成功,跳出弹窗。