1. #1
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Beitrag [TuT] Simple SQL-Injection am Beispiel von PHP

    Bei einer SQL-Injection werden fremde Daten ungewollt in eine SQL-Datenbankabfrage eingeschleust. Oft ist auch von der Abkürzung SQLi die Rede. Mit der gleich abgekürzten verbesserten (englisch improved) Version von MySQL hat das jedoch nichts zutun.
    Viele Seiten verwenden heutzutage Datenbanken zum Speichern von Daten, da man so schnell und einfach Inhalte hinzufügen, entfernen und ändern kann.
    U-Labs hat Beispielsweise ebenfalls eine Datenbank, in der die Daten von allen Benutzern sowie sämtliche Threads und Beiträge gespeichert sind.

    Das Forensystem generiert also dynamische Datenbankabfragen mit Daten von außen - genau hier besteht potenzielle Manipulationsgefahr.

    Um das ganze besser zu verdeutlichen mal ein schlechtes Beispiel:
    Wir haben ein einfaches Login-System das auf PHP basiert. Unser Script bekommt per GET die Logindaten bestehend aus Nutzer und Passwort übermittelt.
    Es soll prüfen, ob diese Kombination in der Datenbank existiert, wenn ja ist der Nutzer eingeloggt.

    Wir basteln also eine dynamische SQL-Query, und prüfen mit mysql_num_rows() ob mindestens 1 Zeile mit den Nutzerdaten in der Datenbank vorhanden ist, dann ist der User eingeloggt.

    Der relevante Teil dieses Scripts sieht dann also wie folgt aus:

    PHP-Code:
    $res mysql_query("SELECT COUNT(*) FROM users WHERE username='" $_GET['username'] . "' AND password='" $_GET['password'] . "'");
    $rows mysql_num_rows($res);
    if(
    $rows 0) {
        echo 
    'Eingeloggt.';

    Warum sind Abfragen nach diesem Schema ein Paradies für SQLis?

    Ganz einfach: Über $_GET kommen Daten von außen, die ungefiltert in einer dynamisch erzeugten SQL-Query eingesetzt werden.
    Daten von außen müssen immer gefiltert werden, da man als Programmierer in der Form oben absolut keinen Einfluss darauf hat, was das für Daten sind.

    Natürlich können das gute sein, dass z.B. Dieter als Benutzername und 123456 als Passwort übergeben wird, dann sähe die SQL-Query so aus:


    SELECT username FROM users WHERE username='Dieter' AND password='123456'
    Daten korrekt, User bekommt Zugang, alles ist gut.
    Da aber wie gesagt nichts gefiltert wird kann man die Query ganz einfach manipulieren und den Login mit ungültigen Daten umgehen:
    Nehmen wir mal an username ist wieder Dieter, wir kennen aber das Password nicht.
    Also übergeben wir als password folgenden String: bla' OR '1'='1

    Damit sieht die Query wie folgt aus (die roten Teile stammen aus der Nutzereingabe von außen):

    Code:
    SELECT username FROM users WHERE username='Dieter' AND password='bla' OR '1'='1'
    Und wir bekommen Zugriff, obwohl das Passwort vollkommen falsch ist.
    Wieso? Durch das manipulieren des Password-Parameters wurde die Bedingung der SQL, bei der wir einen Datensatz zurück bekommen, komplett verändert.
    Zur Verdeutlichung ist in der Query oben alles rot, was von außen als GET-Parameter dynamisch in die Query eingefügt wird.

    Vorher mussten username und password mit den Werten in der Datenbank übereinstimmen, jetzt gibt es 2 Bedingungen: username und password müssen gleich sein ODER '1' ist das gleiche wie '1'.
    username und password sind nicht gleich, aber 1=1 ist eine Bedingung die immer zutrifft, in dem Beispiel eben als Strings da sich am Ende noch ein ' befindet.
    Da ein ODER dazwischen ist, ist der gesamte Ausdruck gültig wenn nur die 2. Bedingung zutrifft.
    Weil 1=1 immer zutrifft liefert uns die Datenbank sämtliche Datensätze die vorhanden sind. Somit ist $rows später auf jeden Fall > 0 und man gilt als eingeloggt, egal was als username und password übergeben wird.

    Das hier ist natürlich ein absolut simples Beispiel. Je nachdem wie das Script mit den Daten umgeht und welche Rechte der Datenbankbenutzer hat ist vom auslesen privater Daten wie Passwörter bzw deren Hashes über das gezielte Manipulieren einzelner Daten bis zum kompletten Löschen der Datenbank alles möglich.

    Hier wurde das Problem nur am Beispiel von PHP demonstriert.
    Andere Weborientierte Sprachen wie Python oder Perl sind davon genau so betroffen, wenn Daten von Außerhalb wie Nutzereingaben nicht richtig bzw gar nicht escaped werden.
    Abhilfe kann geschaffen werden, in dem Daten aus externen Quellen wie Benutzereingaben vorher entschärft werden.
    Noch besser ist der Einsatz von Pepared Statements, da hier nicht explizit jede einzelne Variable manuell escaped werden muss (und das somit auch nicht vergessen werden kann).


  2. The Following 6 Users Say Thank You to DMW007 For This Useful Post:

    AFU (20.02.2014), Gangstersheep (25.07.2012), Gurke (08.09.2012), John Gotti (29.09.2014), Minecraft (25.07.2012), Snees (25.07.2012)

  3. #2

    Registriert seit
    25.07.2012
    Beiträge
    4
    Thanked 1 Time in 1 Post

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP

    sofern es gestattet ist dein tread zu erweitern poste ich hier 2 videos von mir wo sqli per clicktools aka sql poizon und havij erklärt wird

    lücken finden


    db auslesen

  4. The Following User Says Thank You to verpeilt2007 For This Useful Post:

    AFU (20.02.2014)

  5. #3
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP


  6. #4

    Registriert seit
    25.07.2012
    Beiträge
    4
    Thanked 1 Time in 1 Post

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP

    Zitat Zitat von Nico Beitrag anzeigen
    seite wird bei mir leider geblockt

    LibertyGuard
    LibertyGuard has detected that you are about to enter a phishing web site.
    It is strongly recommended not to enter this phishing web site as it can contain viruses or ask you for your login information.
    This is a fake web site created by hackers that wish to gain access to your money.
    redtiger.dyndns.org

    For more information about LibertyGuard please go to Liberty Reserve website and click on LibertyGuard link.

  7. #5
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP

    Ist auf jeden Fall ein Fehlalarm.
    Das Hackit ist ziemlich bekannt, gibt es auch schon eine ganze Weile.
    Kp wieso das von LibertyGuard als Phishing-Seite erkannt wird.
    Entweder die haben eine Auto-Detection die das falsch erkannt hat oder irgendein noob hat die Seite gemeldet und sie wurde ohne Prüfung auf die Blacklist gesetzt.


  8. The Following User Says Thank You to DMW007 For This Useful Post:

    Gangstersheep (25.07.2012)

  9. #6
    Avatar von patlux
    Registriert seit
    26.10.2011
    Beiträge
    1.195
    Thanked 1.596 Times in 725 Posts
    Blog Entries
    2

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP

    Zitat Zitat von verpeilt2007 Beitrag anzeigen
    seite wird bei mir leider geblockt
    Wird wohl automatisch geblockt da die SSL-Zertifizierung unbekannt/als nicht vertrauenswürdig eingestuft ist.

  10. #7
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: [TuT] Simple SQL-Injection am Beispiel von PHP

    Ja ist ein selbst signiertes SSL-Zerifikat, daran kann es natürlich auch liegen.
    Ist mir nicht aufgefallen weil ich das Hackit schon länger kenne und daher das Zerifikat schon vor Ewigkeiten mal Akzeptiert habe.

    Man kann es aber auch ohne SSL aufrufen: RedTigers Hackit
    Dementsprechend kann er ja mal testen, ob die Seite ohne SSL auch geblockt wird.


Ähnliche Themen

  1. Movie-Vision.de SQL-Injection
    Von Snees im Forum Internet und Technik
    Antworten: 0
    Letzter Beitrag: 30.06.2013, 17:37
  2. WordPress Theme gesucht (siehe Beispiel)
    Von Devon im Forum Web-Applications
    Antworten: 3
    Letzter Beitrag: 18.02.2013, 01:00
  3. Simple Pic Bewerten
    Von Make-Grafik im Forum Showroom
    Antworten: 9
    Letzter Beitrag: 04.05.2012, 20:23
  4. Erweitertes OOP-Beispiel
    Von Snees im Forum PHP
    Antworten: 0
    Letzter Beitrag: 12.04.2012, 00:56

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.