BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Verständnis von SQL-Injections » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Verständnis von SQL-Injections
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
theromi theromi ist männlich
Optimiert für IE > 3.2


images/avatars/avatar-2077.gif

Dabei seit: 01.09.2003
Beiträge: 858
Herkunft: Draußen vom Walde komm ich her...

Verständnis von SQL-Injections       Zum Anfang der Seite springen

Hi,

ich beschäftige mich gerade ein wenig mit SQL-Injections und schätze, nach Lektüre von Wikipedia und den weiterführenden Links, dass ich es grundlegend verstanden habe. Nun wollte ich mit ein paar "Reallife"-Exploits angucken um mal zu testen, ob ich die verstehe.

Ein Beispiel (ein Exploit, mit dem ich selber mal getroffen wurde großes Grinsen ):

Zitat:
http://www.xxx.com/?page_id=115&forumaction=showprofile&User=1+union+select
+null,concat(user_login,0x2f,user_pass,0x2f,user_email),null,null,null,null
,null+from+wp_tbv_users/*


Gut, "User" ist offensichtlicht der unüberprüfte Schwachpunkt im PHP-Script. "Union Select" ist mir auch klar, genauso wie concat. 0x2f ist ein Slash im Ascii-Code, wird also als optisches Trennzeichen verwendet. Hier tritt aber die erse Frage auf: Okay, ich kann nicht einfach einen Slash da hin schreiben, ist ja eine URL. Aber muss ich das bei jedem Sonderzeichen machen (also durch den Hex-Code im ASCII ersetzten), oder nur bei diesen, die auf natürliche Weise in URLs leben? Augenzwinkern

Das Zweite was ich nicht verstehe sind die ganzen Kommas mit anschließenden "null"s. Da kann ich mir gar keinen Reim drauf bilden, wie wo und warum die da auftreten müssen. Vielleicht kann da ja einer Licht ins dunkel bringen.

Danke schonmal,
Roman

__________________
Eine Entwicklung scheint zu sein, dass man als Heranwachsender links ist, später wird man liberal und kurz bevor man stirbt ist man superkonservativ. Wenn diese Theorie aufgeht, bin ich von meinem Tod noch sehr weit entfernt.
Farin U.
19.05.2009 19:32 theromi ist offline E-Mail an theromi senden Beiträge von theromi suchen
Zyrus Zyrus ist männlich
Exil-Wessi


images/avatars/avatar-2286.gif

Dabei seit: 01.04.2003
Beiträge: 538
Herkunft: Around The World

      Zum Anfang der Seite springen

Mit SQL bist du nicht vertraut, oder ?

mit "null" wird nur die jeweilige Spalte definiert.

Greetz

Zyrus

__________________
Der Computer arbeitet deshalb so schnell, weil er nicht denkt.- Gabriel Laub -
19.05.2009 21:44 Zyrus ist offline E-Mail an Zyrus senden Beiträge von Zyrus suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Zitat:
Original von Zyrus
Mit SQL bist du nicht vertraut, oder ?

mit "null" wird nur die jeweilige Spalte definiert.
Ich denke, soweit kann er sich das schon zusammenreimen. Die Frage ist nur, warum man null selektieren sollte.

Hier gehe ich aber davon aus, dass man auch den Code kennen müsste, dessen Schwachstelle die Injection ausnutzt. Je nach dem, was man machen möchte, besteht eine Injection ja aus mehreren Teilen. Wenn man eine Datenbankabfrage nur umgehen möchte (z.B. eine Prüfung auf einen bestimmten Feldwert) oder man etwas in die Datenbank schreiben möchte, was nicht reingehört, dann genügt ein einfaches ergänztes SQL-Statement. Möchte man hingegen Werte aus der Datenbank auslesen, so müssen die natürlich auf einer Seite auch noch irgendwo angezeigt werden und nicht einfach in einem PHP- oder MySQL-Fehler untergehen.

In diesem konkreten Fall gehe ich mal davon aus, dass das Ergebnis des Queries in einer HTML-Tabelle ausgegeben werden soll, deren Spalten numerisch aus einem Resultset befüllt werden (also z. B. "<td>$resultrow[3]</td>"). Damit nun der ausgelesene Wert in einer vernünftigen Spalte landet, simuliert die ergänzte SELECT-Abfrage ein paar leere Spalten und den interessanten Part eben in einer Spalte, die vermutlich breit genug für die Anzeige ist.

So zumindest meine Deutung, für alles andere bräuchte man in der Tat den dahinter stehenden Code.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

20.05.2009 00:22 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
theromi theromi ist männlich
Optimiert für IE > 3.2


images/avatars/avatar-2077.gif

Dabei seit: 01.09.2003
Beiträge: 858
Herkunft: Draußen vom Walde komm ich her...

Themenstarter Thema begonnen von theromi
      Zum Anfang der Seite springen

So, endlich mal wieder ein bisschen Zeit Augenzwinkern
Ja, genau, LX hat mir da schon weitergeholfen. Macht Sinn großes Grinsen

Zitat:
Wenn man eine Datenbankabfrage nur umgehen möchte (z.B. eine Prüfung auf einen bestimmten Feldwert) oder man etwas in die Datenbank schreiben möchte, was nicht reingehört, dann genügt ein einfaches ergänztes SQL-Statement.

Und genau das habe ich bei mehreren Lücken ausprobiert und es hat nie funktioniert. Führt PHP vllt. keine zwei Statements in einer Anweisung aus?

__________________
Eine Entwicklung scheint zu sein, dass man als Heranwachsender links ist, später wird man liberal und kurz bevor man stirbt ist man superkonservativ. Wenn diese Theorie aufgeht, bin ich von meinem Tod noch sehr weit entfernt.
Farin U.
30.05.2009 14:12 theromi ist offline E-Mail an theromi senden Beiträge von theromi suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

      Zum Anfang der Seite springen

mysql_query() führt nur eine einzelne Abfrage aus, ja.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

30.05.2009 14:42 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Verständnis von SQL-Injections

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH