"We are back" « oc.at

MySQL Injection

COLOSSUS 17.01.2008 - 17:48 919 8
Posts

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12133
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

.:: unnahbar ::.
Avatar
Registered: Jul 2000
Location: hagenberg
Posts: 2680
semtex ist hier

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

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9822
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

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25520
Welche MySQL-Version? Mit einem Subquery sollte es ab Version 4.1 möglich sein.

edit: 0wned :eek:

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12133
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

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14707
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

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9822
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

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz