Kursleiter: Okay, jetzt möchte ich
Ihnen eine SQL-Injektion und in einer anderen Datei und
auf einer anderen
Seite zeigen und ich zeige Ihnen ein paar
verschiedene Dinge, die Sie tun können, um die Sicherheitsanfälligkeit auszunutzen.
Also gehe ich als erstes auf die Login-Seite,
die hier drin ist.
Benutzerinformation.
Als wir von dort aus zum ersten Mal zur Anmeldeseite gingen,
gingen wir dieses Mal zur Benutzerinformationsseite.
Auf dieser Seite werden Ihnen die Informationen zu dem Benutzer
angezeigt, sofern Sie den Benutzernamen und das Kennwort eingeben.
Also werde ich
Zaid machen und mein Passwort 123456 eingeben.
Und es werden meine Daten, Benutzername und Passwort und meine
Unterschrift als aa angezeigt.
Die Anweisung, die hier ausgeführt wird,
ähnelt der Anweisung, die beim Anmelden
ausgeführt wurde.
Wählen Sie also einen
Stern aus Konten aus, in denen der Benutzername in das
Benutzerfeld und das Kennwort in das Kennwortfeld eingegeben wurden.
Was wir jetzt tun werden,
ist eine andere Art der Ausnutzung dieser
Art von Sicherheitslücke.
Im
vorherigen Video haben wir ein POST-Textfeld verwendet.
Alles, was Sie in
das Textfeld eingegeben haben, wurde mit einer POST-Methode in der Webanwendung veröffentlicht.
Diese Sicherheitsanfälligkeiten können jetzt in GET vorhanden sein.
Und was ich mit
Get meine, ist, wenn Sie ein Get ausführen, wenn etwas als GET gesendet wird,
werden Sie es hier in der URL sehen.
Wenn Sie sich
die URL hier ansehen, sehen Sie, dass sie als
Benutzername zaid und Passwort 123456 gesendet wird.
Also lass mich einfach diese URL hier kopieren.
Und wir fangen an,
über die URL damit zu spielen, anstatt es auf der Webseite zu tun.
Ich möchte Ihnen nur
ein anderes Beispiel zeigen, da
es an vielen Stellen
nicht einmal Textfelder gibt, sondern Nachrichten
und Nachrichten. php, so können wir zum Beispiel hier sehen, in
diesem Beispiel ist es Index. php.
Und bei Ihren Pen-Tests sehen Sie
möglicherweise etwas wie Nachrichten. php und
zum Beispiel, id ist gleich zwei und dann
kannst du versuchen, Sachen hinein zu injizieren.
Wir haben hier also
ein Beispiel, in dem wir
Dinge in das Feld Benutzername einfügen, das dieses
Feld ist, und wir werden hier Dinge einfügen.
Wenn Sie also Ihren Pen-Test durchführen und
Parameter wie diese sehen, sollten Sie versuchen,
sie zu injizieren.
Immer wenn du etwas siehst. php und
dann haben Sie einen Parameter gleich etwas, dann versuchen
Sie immer, Sachen hinein zu injizieren und zu sehen,
ob es für Sie funktioniert.
Wir haben also auch einen Weg gefunden, die Injektion
zu entdecken, und zwar unter Verwendung des Anführungszeichens
und des und.
Also machen wir ein falsches und ein wahres
und eins ist
gleich eins und dann und
eins ist gleich zwei und wenn der Server ausführt, was
wir wollen, dann werden wir wissen, dass es eine SQL-Injection gibt.
Ich zeige
Ihnen einen anderen Weg, um diese
Exploits zu entdecken, und benutze den Befehl von.
Wie der Name
schon sagt, wird die Anweisung order
by verwendet, um die auf dem Bildschirm angezeigten Ergebnisse
anhand einer bestimmten Spalte zu ordnen.
Unsere Spritze wird also so sein.
Also werde ich nacheinander bestellen.
Wenn die Injektion vorhanden ist, sollte dies
funktionieren,
da in jeder select-Anweisung
mindestens eine Spalte ausgewählt sein sollte.
Wenn wir also Order by
One sagen, sagen wir, dass ich die Ergebnisse
basierend auf der
ersten Spalte ordnen möchte. Daher sollte dies für die
Datenbank immer akzeptabel sein.
Und geben Sie ein wahres oder etwas zurück, das wir erwarten.
Wir müssen auch den Kommentar hier
einfügen und diesen Code ausführen.
So ist es genau wie zuvor.
Wenn wir dies
tun, ist dies im Grunde genommen unsere URL und was in der
Datenbank passieren wird. Dies ist
also der Code, der in
der Datenbank ausgeführt wird. Es wird so aussehen.
Es wird also ein Stern aus
Konten ausgewählt, bei denen der Benutzername
gleich zaid ist, und es wird darauf hingewiesen,
dass dies das Zitat schließt und wir eine Bestellung nach der anderen
ausführen. Es sollte keinen Code für
das und geben, und dieser Kommentar wird das verraten SQL-Interpreter, um alles zu
ignorieren, was danach eingeht, damit
all dies ignoriert wird.
Also kopiere ich das.
Sie können diese Injektion also für eine
bestimmte Reihenfolge nacheinander in
den Namen einfügen. Das wird funktionieren, aber ich
möchte Ihnen nur eine andere Methode
zeigen, indem Sie sie über den Browser injizieren.
Eine andere Sache, die ich
beachten möchte, ist,
wenn Sie Sachen in den Browser injizieren, der Browser, der Code sollte verschlüsselt sein.
Wenn Sie dieses Zeichen beispielsweise in die
URL einfügen, sollte
es normalerweise als% 23 geschrieben werden.
Leerzeichen werden beispielsweise in% 20
konvertiert, und% 23 ist der Kommentar, den wir verwenden.
Also werde ich das kopieren und mein Kommentarzeichen damit ersetzen.
Jetzt können Sie HTTP Encoder googeln und
online sehen, dass es Online-Tools
gibt, die dies nur für Sie konvertieren.
Jetzt weiß ich, dass das Hashtag in%
20 konvertiert werden kann.
Deshalb benutze ich es dort.
Und ich drücke Enter.
Und wie Sie
jetzt sehen können, sehen wir etwas, das akzeptabel ist.
Nichts falsch und dann zeigt es mir
die Informationen über Zaid 123456 und zeigt mir die Unterschrift.
Es wird also das Passwort ignoriert,
so dass die Injektion
funktioniert hat und es wird nach
einem sortiert, sodass mir nichts Falsches angezeigt wird.
Lassen Sie uns versuchen, diese Nummer eins zu einer sehr
großen Zahl zu machen, also gebe ich jetzt 10.000 oder 100.000 ein.
Im Moment
möchten wir, dass Sie
die Ergebnisse ordnen, die von der aktuellen select-Anweisung
basierend auf Spalte 100.000 zurückgegeben werden.
Jetzt werden wahrscheinlich nicht 100.000 Spalten in dieser
select-Anweisung verwendet und
daher sollte dies einen Fehler zurückgeben.
Wenn ich dies ausführe,
werden Sie feststellen, dass ein Fehler vorliegt.
Und der Fehler ist in der Reihenfolge nah.
Und dennoch gibt es eine unbekannte Spalte für 100.000 und das ist großartig,
denn jetzt wissen wir,
dass die Datenbank das ausführt, was wir wollen.
Als wir ihm sagten, er solle die
Ergebnisse anhand der ersten Spalte sortieren, wurden die Ergebnisse angezeigt.
Es folgte also dem, was wir gesagt
hatten, und als
wir es dann aufforderten, die Ergebnisse basierend auf einer Spalte
zu ordnen, die nicht existiert, gab es uns einen Fehler.
Es ist also offensichtlich anfällig für SQL-Injektionen.