Sql-Injection [gelingt nicht]

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sql-Injection [gelingt nicht]

    Hallo,

    der Titel ist vlt etwas verwirrend, jedoch wollte ich einem Freund beweisen, dass man bei seinem Login reinkommt. Theoretisch müsste es auch klappen, aber praktisch bin ich einfach zu blöd dafür.

    Folgendes Formular:
    Code:
    <form action="index.php" method="post">
    <fieldset>
    	<legend>Anmeldung</legend>
    	<br />
    	<ul>
    	<li>Nutzername:</li><li><input type="text" name="username" /><br /></li>
    	</ul>
    	<ul>
    	<li>Passwort:</li> <li><input type="password" name="password" /></li>
    	</ul>
    	<ul>
    	</ul><br />
    
    	<ul><li><input type="submit" value="Einloggen" name="submit" /></li></ul>
    	</fieldset>
    </form>
    Sein Sql-Code sieht dabei so aus:
    PHP-Code:


    <?php
     $sql 
    "SELECT nickname, password    
             FROM  members 
                 WHERE `nickname` = '"
    .$_POST['username']."'";  
      
    $result mysql_query($sql) OR die(mysql_error()); 
     
    ?>
    Ich habe nun versuch für "username" folgendes einzugeben:
    Code:
    Nick';UPDATE members SET password = 'md5_pw' WHERE nickname = 'Nick')#
    Durch das ; wollte ich den Update-befehl mit dem Select verbinden, aber er updatet nicht. ..

    Kann mir wer helfen?

    mfg
    Zuletzt geändert von Blackgreetz; 21.05.2007, 20:22.

  • #2
    Ganz so einfach ist das nicht, aus Sicherheitsgründen wird mit mysql_query nur die erste von mehreren Abfragen ausgeführt.

    Du könntest sowas wie
    Code:
    ' OR 1=1 --
    probieren und auf eine aufschlussreiche Ausgabe hoffen...
    ich glaube

    Kommentar


    • #3
      Achso - grml..
      Hatte nen Freund gefragt, der sich bei dem ";" aber auch nicht sicher wahr, aber gut zu wissen(danke).

      Ich kenne ja den kompletten Login-Code, jedoch holt er mit dem select das pw aus der db, hasht(mit t?..ka^^) das POST-pw und vergleichst es dann in einer if, sodass ich da nichts machen kann.

      zu deinem Code:
      Was wäre dieses -- ? ...das gleiche wie, oder?

      Wüsstest du denn, wie ich einen 2. Query anhängen kann vlt mitm Befehl, oder muss ich dein Comm. so verstehen, dass es generell nicht geht?

      mfg

      Kommentar


      • #4
        Also mir ist nichts bekannt, wie man da ne weitere query anhängen kann (und das ist auch ganz gut so).

        Zum --: mysql comment syntax
        ich glaube

        Kommentar


        • #5
          Ja , danke^^... dummheit natürlich von mir mit dem -- ... hätte man auch drauf kommen können, wenn ich nachdenke^^

          Hmm..
          Also wäre das Formular, so wie es dann ausgewertet wird sicher?.. 'Schad Schad'

          trotzdem danke

          Kommentar


          • #6
            Naja, einen mysql-error würdest du ja immerhin bekommen, da steht dann schonmal drin, wie die Tabelle heißt usw.

            Wenn du die Datenbankstruktur nicht kennen würdest, wären das schonmal informationen, die keinen was angehen.

            Ansonsten wüßte ich nichts weiter, was man damit anstellen kann. Vielleicht hat er ja eine ähnliche Struktur, da wo der user sein pw ändern kann oder so.
            ich glaube

            Kommentar


            • #7
              Also ' OR 1=1 -- macht keinen Fehler (nebenbei gesagt^^)

              Nja... Egal - danke zumindest für die Aufschlüsselung

              Kommentar


              • #8
                ... oder man versuch einfach als admin einzuloggen und die Seite anschliessend durcheinander bringt oder die Datenbank löschen oder ... Es gibt viele Möglichkeiten. Fazit: wenn du so lässt, dann dürfte es nicht lange dauern, bis die Seite gehackt ist.

                Kommentar


                • #9
                  Original geschrieben von asp2php
                  ... oder man versuch einfach als admin einzuloggen
                  Aber du kommst ja nicht als Admin rein.
                  Ich habe ja versucht, den Query z.b. mit ') OR 1=1 zu knacken, aber durch die if mit dem password, kommt immer falsches pw als fehler..
                  ich werd ich zwar noch sagen, dass er die post "validieren" muss, aber nja..

                  Oder weißt du, wie er reinkommt?
                  Code ist ungefähr so:
                  PHP-Code:
                   $sql "SELECT nickname, password    
                           FROM  members 
                               WHERE `nickname` = '"
                  .$_POST['username']."'";  
                   
                  $result mysql_query($sql) OR die(mysql_error()); 
                   
                  $row mysql_fetch_assoc($result); 
                   
                  $pass $row["password"]; 
                   
                  $password  md5($_POST['password']); 
                    
                   if(
                  $password != $pass) { 
                  Wäre interessant zu wissen, wie du so reinkommen möchtest (jetzt mal keine ironie^^)

                  Edit: Vlt noch interessant: das ist der login zum acp der seite^^...gibt nur 1 admin bis jetzt und somit kein weiteren user

                  mfg

                  Kommentar


                  • #10
                    Du hast den Code im Vergleich zum ursprünglichen geändert/modifiziert, warum fragst du dann? Ich antworte nicht, wenn du die Bedingungen während der Diskussion änderst. Finde selbst heraus, wie sicher dein Code ist.

                    Kommentar


                    • #11
                      Oben hatte ich bereits erklärt, dass post-pw gehasht wird und das andere aus der db geholt wird beim selecten...und die if hab ich auch angesprochen..
                      -> wüsste nicht, wo ich ihn modifiziert habe(hab ihn ja nur in code ausgedrückt)^^..

                      Ich selber kenne keine weitere Möglichkeit, da noch das PW zu ändern bzw. die if zu überlisten.
                      Fazit: sicher(...oder doch nicht?)

                      Tut mir leid, wenn es falsch rübergekommen ist.

                      mfg

                      Kommentar


                      • #12
                        Sieh es mal so: Selbst wenn ein direkter Einbruch nicht möglich ist (was ich nicht ausschließe!), dann senkt das unbesehene Einbauen der POST-Daten in die Query die Gesamtsicherheit des Logins. Den durch obigen Trick mit OR 1=1 greift die WHERE-Klausel nicht mehr. Nun muß man nur noch ein richtiges Passwort erraten.

                        Somit erhöht jeder zusätzliche Benutzer das Risiko, gehackt zu werden. Denn es werden immer mehr Passwörter benutzt und damit steigt die Chance, eines zu erraten.
                        Du kannst leicht selbst ausrechnen wieviele Versuche notwendig sind, wenn du Zeichenraum und Mindestlänge von Benutzername und Passwort kennst. Das wird deinen Freund überzeugen.
                        Zuletzt geändert von onemorenerd; 21.05.2007, 23:08.

                        Kommentar


                        • #13
                          Hmh. Okay, stimmt schon.

                          Danke dann an alle beteiligten^^..

                          mfg

                          Kommentar


                          • #14
                            Macht man das nicht eher so?

                            Abgesehen davon, dass man noch die Usereingaben prüfen müsste wg, SQL Injection
                            PHP-Code:
                            $sql "SELECT COUNT(*)    
                                     FROM  members 
                                         WHERE `nickname` = '"
                            .$_POST['username']." AND `password` = MD5(".$_POST['password'].")'";  

                             
                            $result mysql_query($sql) OR die(mysql_error()); 

                            // oder so ähnlich weiss grad nicht genau wie man es schreibt
                             
                            if(mysql_affected_rows()) { ...komm rein!...} 
                            Zuletzt geändert von zerni; 21.05.2007, 23:55.
                            Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                            - ...und solche Behauptungen in "falsches Resourcenmanagement"

                            Kommentar


                            • #15
                              Hehe - cool, ein ähnliches(vom typ her) hab ich ihm auch gezeigt.
                              Mir war seine Variante, um ehrlich zu sein, nicht bekannt, aber jeder machts ja eh so, wie er will..

                              mfg

                              Kommentar

                              Lädt...
                              X