CInsects/Protokolle/CInsects:Treffen-2010-10-26
Diese Seite ist eine Unterseite von CInsects.
Heute haben wir uns überwiegend mit Blind SQL-Injections beschäftigt.
Ablauf
Am anfang haben wir nochmal Kurz wiederholt was wir in der Vorherigen sitzung gemacht haben.Das lässt sich im CInsects/Protokolle/CInsects:Treffen-2010-10-19 auch nachlesen. Dannach haben wir uns an Blind SQL Injection Probiert. Am ende gab es noch ein Paar lese Tipps sowie Tipps für Plugins für Firefox.
Blind SQL-Injections
Angriff auf ein Loginscrpt
Unberechtigter login
Als erstes haben wir versucht uns ohne gültige benutzerkennung anzumelden. Dazu haben wir erstmal die ganz einfachen angriffe aus dem letzten mal ausprobiert:
' OR 1=1#
Das script antwortet darauf mit 'Wilkommen Alice'. Der Angriff war also erfolgreich. Das Script hat aus der eingabe den Befehl:
SELECT ID,name FROM user WHERE name=' ' OR 1=1#' AND passwd='[...]'
1=1 ist immer wahr, und durch das AND hat der rest keine bedeutung. Nach erfolgreichem login gab das script einige aufgaben aus.
Die Emailadresse von Bob
Die nächste aufgabe war es Die E-Mailadresse von Bob rauszubekommen. Dazu müssen wir UNION SELECTs benutzen, da die ausgabe der E-Mailadresse offensichtlich nicht vorgesehen ist. Jetzt können wir noch sehen das offensichtlich nur ein Wert wieder ausgegeben wird. Wenn wir jetzt mit UNION SELECT etwas unten an dass ergebnis anhängen, so wird immer noch das erste element ausgegeben. Daher müssen wir dafür sorgen das die orginale abfrage nichts zurückliefert. das erreicht man z.B. durch einen ungültigen Usernamen. Jetzt gilt es rauszufinden wiefiele spalten die erste abfrage nimmt, da man im UNION SELECT genau so vielle nehmen muss. Dabei lässt sich dann auch gleich ausprobieren was wo ausgegeben wird:
bla' UNION SELECT 1 #
Führt zu einem Fehler
bla' UNION SELECT 1,2 #
gibt dagegen die 2 an der stelle des Usernamens aus. Das bedeutet das wir alles was wir ausgeben wollen an der Stelle der 2 schreiben müssen. Um jetzt an die Email zu kommen müssen wir raten wie die Spalte heißt (man kann auch über das INFORMATION_SCHEMA gehen das ist bei viellen einträgen und nur einer ausgabe aber sehr müsam).
bla' UNION SELECT 1,e-mail FROM user#
Das führt zu einem fehler. Das kann jetzt zwei Ursachen haben: die spalte heißt nicht e-mail oder die Tabelle hißt nicht user. wenn wir jetzt etwas rumprobieren stellen wir Fest das
bla' UNION SELECT 1,email FROM user#
Funktioniert. Die Emailadresse ist aber offensichtlich nicht die von Bob. dazu müssen wir das SQL jetzt ergänzen und den Spaltennamen für dei usernamen erraten:
bla' UNION SELECT 1,email FROM user WHERE name='Bob'#
jetzt sehen wir die E-mailadresse des users Bob
Vortsetzung volgt --Nils 21:42, 27. Okt. 2010 (CEST)
Links
Vorschau auf die kommende Woche
Wir werden uns in der kommenden Woche mit Remote Code Execution auseinandersetzen. Es wurden zum Ende der Sitzung folgende Firefoxplugins empfohlen: