博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《XSS跨站脚本攻击剖析与防御》—第6章6.5节利用Flash进行CSRF
阅读量:7251 次
发布时间:2019-06-29

本文共 2781 字,大约阅读时间需要 9 分钟。

本节书摘来自异步社区《XSS跨站脚本攻击剖析与防御》一书中的第6章6.5节利用Flash进行CSRF,作者邱永华,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.5 利用Flash进行CSRF

XSS跨站脚本攻击剖析与防御
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类。

例如,要向发送一个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,如下:

通配符的使用意味着允许访问来自任何域的文档,因此可以使用Flash跨域读取数据。如果目标站点根目录没有crossdomain.xml文件,但是设置了by-content-type等相关属性,同样可以利用Security.loadPolicyFile()来加载其他域中的跨域文件绕过限制,如:

Security.loadPolicyFile("http://www.test.com/sub/crossdomain.xml")

本章关于Flash应用安全的内容就介绍到这里,如果读者想了解更多相关知识,可以参考本书参考文献中列举的资料。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
Laravel 5.3 用户验证源码探究 (一) 路由与注册
查看>>
程序员考证之信息系统项目管理师
查看>>
scikit-learn学习笔记
查看>>
mybatis 传入多个参数
查看>>
opencv给图片添加文字水印<转>
查看>>
mysql查询表的数据大小
查看>>
初识Continuation
查看>>
smooth l1
查看>>
ET–异步协程使用–TimerComponent篇
查看>>
Linux LVM学习总结——Insufficient Free Extents for a Logical Volume
查看>>
智课雅思词汇---二十一、名词性后缀acity是什么意思
查看>>
JavaWeb 返回json数据的两种方式
查看>>
(转)Java 详解 JVM 工作原理和流程
查看>>
关于如何获得数据库数据变化的情况(比定时查询方便多了)
查看>>
阿里员工都是这样排查Java问题的,附工具单(转)
查看>>
用flutter写一个精美的登录页面
查看>>
[转]Docker php extensions gd
查看>>
Java Program Mapping GB2312 to Unicode
查看>>
C语言标准中的逻辑位移和算术位移
查看>>
查看当前运行的SQL语句
查看>>