第1关
查看源代码,可以发现get传参的name值test插在了HTML代码中
那么我们可以直接url处插入一段js弹窗
第2关
我们可以先试一试上关的办法
这里我们发现不起作用,按F12查看一下源代码
这里我们可以看到我们的js代码被当作了value值,我们需要跳出value,让网站识别到我们的js代码
"><script>alert(1)</script>
第3关
我们先随便输入一个,然后去看页面源代码,这里我们输入了123456
这里我们可以看到他是单引号闭合的,与上关一样,跳出value。
发现还是不成功,查看源码,我们发现我们的<>被转义了
那我们就试试onfocus事件绕过:
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面图片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
' οnfοcus=javascript:alert() '
再次点击输入框即可
第4关
我们直接查看源代码
与上关一样,依然在input标签内,只是双引号闭合,我们继续使用onfocus事件
" οnfοcus=javascript:alert() "
第5关
查看页面源码
我们试一试上关的方法
发现没有成功,再查看源码
这里我们的on变成了o_n,那我们就换一个标签,我们使用a标签,利用里面的href属性来实现我们的目的
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码
"> <a href=javascript:alert()>xxx</a> <"
第6关
这一关我们先试试第五关的办法
看一下源代码
这一关发现href也被过滤了,
不过我们想起html的大小写不敏感(注意⚠️:是html不敏感,js是大小写敏感的)
于是大小写绕过
"><a HrEf="javascript:alert()">alert<a>
第7关
还是用上关的方法试试
查看源代码
发现href不见了,script也不见了,那我们可以试试双写绕过
"><a hrHrEfef="javascrscriptipt:alert()">alert<a>
第8关
试试上关的办法
查看源代码
发现上面框输入什么,下面的href也跟着变,于是直接输入javascript:alert(),发现script被过滤,大小写不能绕过,后来才发现可以进行unicode编码绕过
第9关
用上一关的办法试试
javascript:alert()
这关为白名单绕过,白名单就是http://
所以我们需要在我们的payload中加上http:// 同时让他不能影响到我们的payload,最简单的办法就是注释它。所以我们直接在第八关的payload上加上/*http://*/
javascript:alert()/*http://*/
第10关
这关通过源代码可以看到有三个隐藏的input框,我们可以试试用get传参把三个都试一试,最后发现第三个成功了
第11关
我们还是先用上一关的办法试试
查看页面源代码
表单中t_ref看起来像是接受referer来源,对访问数据包添加referer发现能够接受数据,尝试进行注入,我们使用到抓包工具进行抓包,修改Referer字段
referer:click me!" type="button" οnmοuseοver="alert(/xss/)
第12关
这一题和上一题一样的手法,只是字段改变了是在http请求头中的user-agent字段上。在网页代码当中发现UA头部信息,本关卡为UA头部注入恶意代码,将js代码插入到UA头部当中,使用burp或者hackbar工具进行
User Agent:click me!" type="button" οnmοuseοver="alert(/xss/)
第13关
通过观察源码发现,本题为http请求当中的cookie字段
这一题和上两题一样的手法相似,改变的是在http请求头中的Cookie字段上。
使用burp抓包或者hackbar工具进行修改cookie信息:
Cookie: user=click me!" type="button" οnmοuseοver="alert(/xss/)
第14关
这关报废了
第15关
查看页面源代码
观察源码发现短短的几行,实体转义了src的值
使用了ng-include这个表达式的意思是当HTML代码过于复杂时,可以将部分代码打包成独立文件,在使用ng-include来引用这个独立的HTML文件。
ng-include指令一般用于包含外部HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一域名下,也就是要调用同一域名下的其他网页。因为默认情况下,包含的文件需要包含在同一个域名下。很有可能这个指令就是突破口,我们看看源代码,果然有ng-include,并且对其输入做了过滤,所以我们可以包含一个有漏洞的页面
可构造以下payloa
src='level1.php?name=<a href="javascript:alert(1)">'
第16关
我们首先先把name变成keyword,这样内容就显示出来了
我们先试试写个a标签
<a href='javascript:alert(1)'>ahh
不对,查看页面源代码
我们可以看到我们的空格和script被过滤掉了,那我们用%0a代替空格,将script进行拆分
payload:
/level16.php?keyword=<a%0ahref='javas%0acript:alert(1)'>ahh
第17关
查看源代码,我们发现有两个参数
通过代码发现,本关卡有两个参数:arg01、arg02,当我们发送的时候,发现他们是会互相拼接起来的,那么我们就容易想到这里会不会就是突破口,发现这两个参数是在embed上,embed标签定义嵌入的内容,并且做了尖括号过滤,那么我们可以加入一个属性进去,生成恶意代码。embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,但是呢相对于他们,embed标签打开不了文件的时候就会有块错误的区域。也可以绑定各种事件,比如尝试绑定一个onmouseover事件。
?arg01=a&arg02=' οnmοuseοver=alert("1")
第18关
与17关一模一样
第19关
第20关
这两关的参数都进行了html实体转换,查看资料得知需要使用flash插件绕过,flash现在太过落后了,没有人再用了,没必要再去了解