Drücke "Enter", um den Text zu überspringen.

IT-Sicherheit: Code Injection grundsätzliches Prinzip und Beispiele für SQL und HTML

Grundsätzliches Prinzip

Injection, bezeichnet man das Einfügen fremden Codes zu einem bereits bestehenden Programmcode. Injection ist also eine Manipulation bestehender Programmierung. Mittels Code Injection wird dabei neuer Programmcode injectiert, also eingefügt und sogar bestehender Programmcode so manipuliert, dass er nicht mehr das macht, was er eigentlich sollte.

Damit eine Injection funktioniert, muss eine Schwachstelle existieren. Diese Schwachstelle besteht darin, dass zum Beispiel unerwünschte Eingaben, also manipulierte Daten, wie schädigender Code nicht ausreichend gefiltert werden und ohne Prüfung abgespeichert oder ausgeführt wird.

https://github.com/JavanXD/html-injection-sample

Anwendung einer HTML-Injection

HTML wird verwendet um den Inhalt von Webseiten grafisch darzustellen. JavaScript ist die Programmiersprache, die verwendet wird, um Inhalte und Objekte während der Laufzeit, also dynamisch zu erstellen, verändern oder entfernen.

Die Anfälligkeit zur Code Injection hängt vom verwendeten Browser, beinhaltend ausgeführte Plugins und Addons, sowie die Webseite selbst ab.

Eine JavaScript Injection findet vom User selbst, zum Beispiel in der Eingabe von Formulardaten, die Parameter der POST/GET Methoden statt oder in der Adressleiste des Browsers, die das Ausführen von JavaScript ermöglicht und auch von der Webseite selbst, wenn sie den fremden Code ausführt.

Auch Add-ons sind eine nicht zu unterschätzende Schadcode Quelle, da sie es ermöglichen die Inhalte von jeder aufgerufenen Webseite zu manipulieren.

 

Beispiele zur Anwendung einer HTML-Injection mittels JavaScript

siehe HTML-Injection.php

Versuch 1: Eingabe eines Textes wie “Hey ich bin 18 Jahre alt”

Versuch 2: Die Texteingabe über den GET Parameter in der URL-Adressleiste

  • 2.1 Die Eingabe von Text mit mehr als 15 Ziffern
  • 2.2 Die Eingabe von Buchstaben

Versuch 3: Die Eingabe von HTML Tags wie “<script>alert(1);</script>”

Versuch 4: Die Eingabe von JavaScript Code wie “ „“ /><marquee> Injection Angriff </marquee> <script>confirm(2);</script>”

Versuch 5: Das Weiterschicken eines Links, der bei Ausführung im Hintergrund unerkannt Code ausführt mit “?parameter=“ /><body onload=“javascript:alert(1);“    “

 

Erklärung zu den Beispielen

Versuch 1:     Demonstriert, dass Eingaben im Browser überprüft werden.

Versuch 2:     Zeigt auf, dass das Überprüfen der Eingaben im Browser nicht ausreicht

Versuch 3/4/5:    JavaScript Codes können bei nicht ausreichender Filterung ausgeführt werden

 

jüngstes Beispiel zur HTML-Injection

April 2015 wurde bei der chinesischen Suchmaschine badu, die vergleichbar große Nutzerzahlen wie Google aufweist, eine Javascript Funktion injectiert, die einen Seitenaufruf auf einer anderen Webseite ausführt, dadurch konnte von Hackern gezielt ein Ddos Angriff ausgeführt werden um andere Server zum Überlauf zu zwingen.

 

SQL-Injection

SQL (=Structured Query Language) ist eine Datenbanksprache und dient zur Verwaltung von Datenbanken. Mittels SQL Querys lassen sich Einträge in eine Datenbank eintragen, lesen und löschen. SQL Querys können je nach Version auch Funktionen ausführen.

 

Anwendung eines gewöhnlichen SQL-Querys

Suchen wir auf einem Onlineshop nach dem Produkt Rasenmäher, geben wir auf der Webpräsenz des Shops im Such Formular “Rasenmäher” ein.

Mittels PHP kann ein solcher Fall so umgesetzt werden:

$parameter = $_REQUEST[‚produktname‘];

$query1 = „SELECT * FROM produkte WHERE name LIKE ‚$parameter‘ ORDER BY name“;

 

Anwendung einer SQL-Injection

Wird wie in diesem Fall die Variable im Query nicht ausreichend geprüft kann dort auch über eine Variable übermittelter, also möglicherweise fremder SQL-Code ausgeführt werden.

Entspräche die Variable $parameter dem Inhalt “Rasenmäher‘ OR ‚Handschuhe” würde der Query ohne Fehlermeldung ausgeführt, aber die Ausgabe würde auch die Handschuhe enthalten.

Wichtig ist, dass die Syntax des SQL Querys stimmt, damit kein Fehler ausgegeben wird. Würde der Shop Betreiber nämlich “ als Anführungszeichen verwenden und nicht wie im Beispiel ‘ so muss das Gegenstück zum Schließen des Textbereichs identisch sein.

 

Gängige Methode zur Verhinderung von SQL-Injection

Die Programmiersprache PHP bietet dazu die Methode mysql_real_escape_string() um Daten bevor sie als Query ausgeführt werden zu maskieren. Denn wenn vor einem Anführungszeichen ( “ oder ‘ ) ein Backslash ( ) steht, so ist dieses Anführungszeichen nicht Teil des auszuführenden Programmcodes.

$parameter = mysql_real_escape_string($_REQUEST[‚produktname‘]);

$query2 = „SELECT * FROM produkte WHERE name LIKE ‚$parameter‘ ORDER BY name“;

 

Diese Maskierung reicht leider nicht aus um SQL Funktionen wie sleep() durch den Variableninhalt “%‘ AnD sLeep(3) ANd ‚1%” auszuschließen. Eine Abfrage mit diesem Inhalt stoppt die Datenbank für drei Sekunden und verhindert daher weitere Abfragen, wenn die maximalen gleichzeitigen Verbindungen aufgebraucht sind. Somit also eine bestehende Schwachstelle in der IT-Sicherheit zum aufhängen von Servern.

 

Trotz Vorsicht und Wissen werden ständig große Firmen Opfer dieser Schwachstelle. Deshalb ist man dabei die alte mysql Version in zukünftigen PHP Versionen (5.6.6) abzuschaffen.

Durch einen Umstieg auf die neuere Erweiterung mysqli zur Datenbankverwaltung entfällt das zusätzliche Überprüfen der Variablen.

Schreibe als erster einen Kommentar...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.