CInsects/Protokolle/CInsects:Treffen-2010-10-26: Unterschied zwischen den Versionen

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
(etwas inhalt hinzugefügt.... (mehr kommt demnächst))
Zeile 4: Zeile 4:
  
 
== Ablauf ==
 
== Ablauf ==
FIXME
+
 
 +
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 ==
 
== Blind SQL-Injections ==
FIXME
+
 
 +
=== 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 --[[Benutzer:0rokita|Nils]] 21:42, 27. Okt. 2010 (CEST)
 +
 
 +
== Links ==
 +
 
 +
* [http://mercarion-online.de/test/CInsects Hackits]
 +
 
 
== Vorschau auf die kommende Woche ==
 
== Vorschau auf die kommende Woche ==
  

Version vom 27. Oktober 2010, 21:42 Uhr

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: