MySQL Injection

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_injection_190572/page_1 - zur Vollversion wechseln!


COLOSSUS schrieb am 17.01.2008 um 17:48

Hallo allerseits,

ich melde mich hier auch einmal ganz frech mit einem Hilfegesuch eine Uni-Aufgabe betreffend :D
Ich bin alles andere als ein Guru was SQL anbelangt (bin ja auch kein DBA), und nicht in den Finessen der Sprache bewandert. Fuer eine Uebung an der Uni muss ich jedoch eine Webapplikation mittels SQL-Injection dazu ueberreden, ein paar Informationen herzugeben, dei sie lieber verschweigen moechte.
Das ganze laeuft unter blind SQL injection, es gibt also keine Moeglichkeit, die direkten Statusmeldungen des MySQL-Daemons irgendwie sichtbar zu machen.
Die ersten beiden Uebungen hatte ich trotzdem recht schnell ueberwunden, die dritte und letzte bereitet mir allerdings Kopfzerbrechen:

Die Website empfaengt ueber einen HTTP-GET-Request (mindestens) einen Parameter "memberno", der ueber diese Spalte als Selektor Datensaetze aus einer Datenbanktabelle anzeigt. Da sich das ganze ja exploiten lassen soll, ist ein "?memberno=0 OR 1=1" moeglich, sodass ich alle Records in der Tabelle durch die Webapplikation (in aufbereitetem Zustand, also durch die PHP-Applikation geparsed - einige Spalten werden dabei wohl verschwiegen) anzeigen lassen kann.

Die Aufgabe sieht allerdings vor, dass man ueber die verwundbare Applikation Informationen aus einer ANDEREN Tabelle zieht, die die gleiche Struktur wie jene hat, in der man gerade herumwurstet.

Meinen Recherchen zufolge unterstuetzt der PHP-MySQL-Client kein Query Stacking, d. h. "?memberno=0 OR 1=1; SELECT * from otherTable" etc. sind zum Scheitern verurteilt (wenngleich ich auch hier nicht wuesste, wie ich die selben Spalten wie im ersten Query selektieren sollte - die Namen sind mir ja nicht bekannt) - was sich auch mit meinen Beobachtungen deckt. Egal was ich bisher hintendrangehaengt habe, die Result-Page blieb gaehnend leer (vermutlich wegen eines Syntax Errors).

Ich moechte also versuchen, innerhalb der WHERE-Clause die Tabelle zu wechseln, auf die das Query zielt. Fragt sich nur: ist das ueberhaupt moeglich, oder verfolge ich momentan noch einen ganz falschen Ansatz?

Danke fuer sachdienlichen Input und eure Zeit! :)
- colo


samuel schrieb am 17.01.2008 um 18:02

semtex ist hier

schau dir mal UNIONS an, die unterstuetzt sowohl PHP als auch mysql


ica schrieb am 17.01.2008 um 18:08

im where teil ist aber auch kein union möglich.

http://dev.mysql.com/doc/refman/5.0/en/select.html

da siehst du schnell was im where teil überhaupt möglich ist.

du könntest evtl. mit subqueries was machen.


mat schrieb am 17.01.2008 um 18:11

Welche MySQL-Version? Mit einem Subquery sollte es ab Version 4.1 möglich sein.

edit: 0wned :eek:


COLOSSUS schrieb am 17.01.2008 um 18:39

Danke, ein UNION SELECT hat das ganze im Endeffekt geloest. :)

-> http://dev.mysql.com/doc/refman/5.0/en/union.html

Die MySQL-Version war uns im uebrigen nicht bekannt.


semteX schrieb am 17.01.2008 um 19:39

Zitat von ica
im where teil ist aber auch kein union möglich.

http://dev.mysql.com/doc/refman/5.0/en/select.html

da siehst du schnell was im where teil überhaupt möglich ist.

du könntest evtl. mit subqueries was machen.
SELECT * FROM BLA WHERE id<10
UNION
SELECT * FROM BLU WHERE org = 9

soll ned funktioniern? bezweifl ich jetzt mal ganz stark


ica schrieb am 18.01.2008 um 10:22

Zitat von semteX
SELECT * FROM BLA WHERE id<10
UNION
SELECT * FROM BLU WHERE org = 9

soll ned funktioniern? bezweifl ich jetzt mal ganz stark

er sagte er kann maximal im where teil etwas schreiben, und das union befindet sich nunmal nicht im where teil.


kleinerChemiker schrieb am 18.01.2008 um 11:20

wenn man es als sql injection betrachtet schon

die abfrage ist

SELECT * FROM bla WHERE id=$x

und er übergibt

x=3 UNION SELECT * FROM blu


gue schrieb am 18.01.2008 um 13:31

Zitat von ica
er sagte er kann maximal im where teil etwas schreiben, und das union befindet sich nunmal nicht im where teil.
Entweder du weißt nicht, was eine SQL Injection ist oder du willst deinen Fehler nicht zugeben. Auch wenn hinter der WHERE Klausel was anderes stehen würde, könnte er das einfach auskommentieren.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025