关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集
0x01:环境配置
要想完成本关,需要下载 Flash,不然就会出现下面的情况:
我个人建议,是直接下载一个 Flash 游戏浏览器,下载链接如下:
Flash 浏览器下载渠道
- CSDN 配套资源:FlashBrowserInstaller.exe
- 官网下载:Flash游戏浏览器-官方网页浏览工具
访问链接,点击 ”立即下载“,即可下载 Flash 游戏浏览器的安装包。
在安装 Flash 游戏浏览器之前,需要先关闭本机的杀毒软件(好家伙,病毒是吧),俺不知道有没有毒哈,没有关闭的话直接下载会被系统干掉。
首先是,搜索 ”病毒和威胁防护“:
进入软件后,选择 ”管理设置“:
关闭 ”实时保护“ 功能即可:
下面就是双击我们一开始下载下来的 Flash 游戏浏览器的安装包,进入安装流程:
按照如下方式进行配置,可以更改一个你能找的到的路径,方便后期卸载:
配置完成后,就是点击 ”立即安装“ ,然后等它安装好,就可以直接使用了。
如果你的系统比较良心,还会弹出下面的内容,点击阻止就可以了:
0x02:过关流程
打开 Flash 游戏浏览器,访问 XSS LABS Level 19 的靶场地址:
http://127.0.0.1/xss-labs/level19.php?arg01=a&arg02=b
进入靶场,鼠标右击,查看网页源码,可以发现 Level 19 与前两关不一样,虽然也是接收两个参数,但是参数内容被 "
号包裹了,且传入的内容还被做了过滤,所以前面那种为标签添加监听事件的方法是无效了。
那么,本关考察的,就是 Flash XSS 了(真的小众)。
首先是要下载 .swf
文件,比如点击一下上面的那个链接xsf03.swf?a=b
,如果是在 Flash 游戏浏览器中,则会跳转到一个页面,并不会弹出下载框,盲猜是被 Flash 插件直接解析了:
如果把上面的那个链接复制到不支持 Flash 解析的浏览器中,比如 Chrome,就会弹出下面这个内容,直接保存即可:
如果把上面的那个链接复制到不支持 Flash 解析的浏览器中,比如 Chrome,就会弹出下面这个内容,直接保存即可:
<!-- 下面是我在 Chrome 中访问的链接 -->
http://127.0.0.1/xss-labs/xsf03.swf?a=b
保存完毕后,我们需要对这个 .swf
文件进行分析,这里需要用到 JPEXS 这个工具,项目地址如下:
我们可以根据我们的系统,选择适合我们的安装包,比如笔者当前使用的是 Windows 系统,则安装流程如下:
下载成功后,本地就会出现一个 .exe
的安装包,双击即可运行(傻瓜式安装,这里就不多写啦)。
第一次使用 JPEXS 的时候,你会发现,界面文字太小了:
可以按照下面的流程调整软件的字体大小,这边建议 1.5 就可以了,2 的话就非常大了,修改完成后点击确认,软件就会自动重启:
重启后,有时候会发现标签栏文字变大了,但是脚本文件文字依旧很大,这个时候需要将上面的 UI 缩放设置也调整到 1.5,重启软件即可(如果不行,需要关机重启)。
下面进入逆向环节(不要慌,作者写这篇的时候也是第一次)。
记得靶场界面的报错吗,Movie (436) is incompatible with sifr.js
,这个内容既然能回显,那么我们就从这个内容入手,开始搜索:
如下图,我们发现 sIFR 文件的 VERSION_WARNING
变量中定义了页面的报错,且还预留了 %s
占位符,证明是可以向其中传参的,那么应该传递什么参数,目标才能接收呢?
我们搜索 VERSION_WARNING
,看看后面对它都做了哪些处理:
通过上面的简单分析,我们知道了,页面报错得内容是可以通过 _root.version
进行控制的,那么 _root.version
又是怎么获得的呢?
这里也比较 Easy,记得靶场中的两个参数吗,传入后会是一个key=value
的格式,那么你说,这个 key
会不会就是 version
呢(它太显眼了)?
?arg01=version&arg02=Blue17
那么,有了回显点,XSS 还不是手到擒来。这里尝试直接传入一个普通的 XSS 脚本:
?arg01=version&arg02=<script>alert(1)</script>
这里可以发现,它居然还会过滤标签。不过已经有了回显点,不要慌,一个一个标签上(不行的话,就继续逆向吧),这里其实可以把 HTML 所有标签都收集起来做个字典的(巧了,我做了)。
但是现在有个麻烦的事,字典有了,你也只能一个一个试,因为界面回显的内容,完全是靠 Flash 插件后期渲染的,并不是说页面源码就有的。
这里就不实验了哈,直接公布答案 <a>
标签可以回显,所以 Payload 如下:
?arg01=version&arg02=<a href='javascript:alert(1)'>Test</a>
其实按照道理来说,点击上面那些标签即可触发 XSS 攻击,但是笔者点了好多次,并没有弹窗出现,可能是 Flash 游戏浏览器的问题吧(笔者之前在 Flash 中心中好像实验成功了,所以,如果有闲情逸致的小伙伴,可以试试,直接去 Flash 官网,下个全套 Flash,链接放在下面咯)。
0x03:源码分析
下面是 XSS LABS Level 19 的后端源码,以及我对其的部分笔记:
<!DOCTYPE html><!--STATUS OK-->
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
// 修改 alert 的默认行为,进入下一关
window.alert = function() {
confirm("完成的不错!");
window.location.href = "level20.php?arg01=a&arg02=b";
}
</script>
<title>欢迎来到level19</title>
</head>
<body>
<h1 align=center>欢迎来到level19</h1>
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?' . htmlspecialchars($_GET["arg01"]) . "=" . htmlspecialchars($_GET["arg02"]) . '" width=100% heigth=100%>';
// 传入的数据经过 htmlspecialchars 过滤后,传递给了 xsf03.swf,因为是被 " 包裹,所以无法逃逸出 src 标签,只能从 Flash XSS 找突破口
?>
</body>
</html>