一种自动化检测 Flash 中 XSS 方法的探讨
对于如何检测 Flash 中的 XSS,每个人都有自己的方法,无论是使用成型的自动化工具(比如 swfscan)还是自己开发自动化工具(先反编译,再对 actionscript 代码审计)还是直接人工对代码进行审计。都能够检测到 Flash 中存在的 XSS 漏洞。但是这些方法会存在一些问题,如:
自动化工具属于静态分析,误报比较高,需要投入大量人工精力去加以分析 完全人工效果最好,但是也更加耗费精力在这里我们来探讨一种动态检测 Flash 中 XSS 的方法,该方法有自己的优点,但是也有比较明显的缺点,所以本文的标题定位于“探讨”。
0x01 原理所谓动态检测,就是通过程序加载 Flash 插件,然后再载入 Flash 文件,对事件和错误信息进行捕捉,再对信息分析来判断 Flash 中是否存在 XSS 漏洞。
先来看下面两张图,以 Firefox 浏览器为例:
Firefox 访问 http://test.com/xss.swf?alert=1,Flash 成功执行 JS 代码,弹出对话框。
Firefox 访问 http://test.com/xss.swf?alert=1/ ,Flash 执行 JS 报错,显示错误详细信息。Firefox 能够显示 Flash 执行 JS 错误时的详细错误信息。
到这里也就明白检测的原理了,就是:
程序调用 Firefox Firefox 加载 Flash 插件 Firefox 访问对参数经过构造的 Flash 链接,比如 http://test.com/xss.swf?alert=1/ 程序捕捉错误信息或者 alert 事件 根据错误信息或者 alert 事件信息来判断该 Flash 是否存在 XSS 漏洞 0x02 具体实现具体如何实现呢?我们不会真的调用 Firefox,而是直接采用一套开源的可以解析 JS 的工具包:CasperJS。下面看下 CasperJS 官网的一段介绍:
CasperJS is an open source navigation scripting testing utility written in Javascript for the PhantomJS WebKit headless browser and SlimerJS (Gecko).
CasperJS 目前支持两种引擎:PhantomJS(WebKit内核)和 SlimerJS(Gecko内核)。Gecko内核就是 Firefox 所使用的内核,又通过 CasperJS 文档了解到,使用 SlimerJS 引擎时候可以通过 loadPlugins 来加载 Flash 插件。
所以我们就可以通过 CasperJS 来完成我们的功能需求,下面是代码实现:
flash_detect.js
#!js var casper = require(casper).create({ pageSettings: { loadImages: true, loadPlugins: true // load flash plugin logLevel: "info", verbose: false casper.start(about:blank, function() {}); // catch alert casper.on(remote.alert, function(message) { this.echo({"type": "alert", "msg":" + message + "}); // catch page error info casper.on(page.error, function(message, trace) { this.echo({"type": "error", "msg":" + message + "}); var url = casper.cli.get(0); casper.thenOpen(url, function() { this.wait(2000, function(){}) // delay 2s casper.run();
代码很简单,就是通过 CasperJS 来访问 Flash 文件,然后捕捉页面中的错误信息和 alert 事件。在这里有一点需要注意就是有的 Flash 不会立即执行 JS 代码,所以我们在打开一个 Flash 文件后,在当前的页面停留 2 秒。
0x03 执行效果我们刚才那个 Flash 文件用这个检测代码检测下看看效果 ,如下:
#!bash piaca at piaca in ~/source$ casperjs --engine=slimerjs flash_detect.js "http://test.com/xss.swf?alert=1" {"type": "alert", "msg":"1"} piaca at piaca in ~/source$ casperjs --engine=slimerjs flash_detect.js "http://test.com/xss.swf?alert=1///"" {"type": "error", "msg":"SyntaxError: missing ) after argument list"}0x05 写在后面的话
实际中我通过访问网上的一些业务,把其中的 Flash 抓下来,然后通过程序去检测,效果还是不错的。当然这其中包括我们自己业务中的 Flash XSS 漏洞。
但是目前的检测程序只能是一个 Demo,要想在生产环境中使用,还需要解决以下问题:
效率:目前是单进程单线程进行检测,会影响检测效率,同时由于 SlimerJS 会打开一个 GUI 窗口,在一定程度上也会影响效率; 误报:在 Demo 中我们没有过多的处理错误信息,所以在实际测试中会有比较多的误报; 参数:这里的参数只是 Flash 文件接收的参数,我们通过日志分析等可以快速获取业务中的 Flash 文件,但是如何获取 Flash 接收的所有参数名呢?上面几个问题并不是致命的问题,我们可以通过多种方法去解决,但是正如前面所说的这个检测程序有个致命的缺点,那就是:
这个检测脚本只能检测很明显的 XSS 漏洞,如果 Flash 中对参数有一定的处理措可能就无法进行检测了;所以本文仅仅做自动化检测 Flash 中 XSS 漏洞的探讨,如果你有好的方法,希望能与我交流。thx。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/56029.html
FireFoxjava开源相关文章
- 【说站】XPath定位方法,chrome浏览器中查看html元素的方法
- java测试案例编写方法_java实现自动化测试实例
- App自动化测试|原生App元素定位方法(二)
- Exscientia和MD安德森中心启动战略合作,利用AI开发新型肿瘤治疗方法
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 分析使用 MetaClass 进行方法注入前后 mateClass 类型变化 )
- 大小Linux 统计文件夹大小的简单方法(linux统计文件夹)
- 锁研究Linux进程死锁及其解决方法(linux进程死)
- Linux中永久修改路由的方法(linux的永久修改路由)
- 设置MySQL远程访问权限的方法(mysql远程权限)
- Oracle 抓取当前时间的方法.(oracle获取时间)
- 在 Ubuntu 上自动化安装基本应用的方法
- Linux系统快速、安全、简单的关机方法分享(linux系统如何关机)
- Oracle数据库冷恢复技术深入剖析(oracle冷恢复方法)
- Oracle介质位置失效排查原因及解决方法(oracle介质位置无效)
- Oracle中使用子程序的方法(oracle中子程序)
- win2003服务器删除服务的方法
- js获取GridView中行数据的两种方法分享
- linux查看cpu是否支持64位的方法
- jquery修改网页背景颜色通过css方法实现