Kursleiter: Um nun SQL-Injektionen zu entdecken, müssen Sie
Ihr Ziel durchsuchen und versuchen,
jede Seite zu unterbrechen.
Wenn Sie also ein Textfeld oder
einen Parameter in diesem Formular sehen,
zum Beispiel Seite. php dann ist sowas gleich was, versuch
mal zeug hier einzuspritzen.
Versuchen Sie also, ein einfaches
Anführungszeichen zu verwenden, und oder die Anweisung order by, um die
Seite zu brechen und sie anders aussehen zu lassen.
Ich zeige Ihnen hier ein Beispiel.
Und ich gehe zuerst auf die Anmeldeseite, genau hier.
Und ich werde gebeten, mich jetzt anzumelden.
Aber ich habe mich tatsächlich mit meinem eigenen Namen registriert.
Sie können sich also einfach hier anmelden.
Ich habe einen Benutzernamen namens
Zaid und ein Passwort mit eins zwei drei vier fünf sechs.
Also lasst uns zuerst ...
Ich werde mich einloggen, um es dir zu zeigen.
Mein Benutzername ist
Zaid und mein Passwort ist eins zwei drei vier fünf sechs.
Und jetzt bin ich als
Zaid eingeloggt und meine Unterschrift war aa.
Es ist einfach nichts wirklich, wie als Test.
Also melde ich mich
ab und wir sind wieder auf der Anmeldeseite.
Genau hier haben wir die Seite, auf der
Sie versuchen können, diese einzuspritzen.
Aber darauf werden wir später noch eingehen.
Im Moment
haben wir ein Beispiel für das Injizieren in Textfelder.
Sie können also versuchen, den Namen und
das Passwort einzugeben.
Also werde ich meinen Namen als Zaid und ich
werde ein einfaches Anführungszeichen setzen.
Also schreibe ich dieses Zeichen in mein Passwort.
Also mal sehen, ob wir es brechen können.
Und wie Sie jetzt sehen
können, wird uns ein Fehler angezeigt.
Und es sieht nicht nach einem
normalen Fehler aus, sondern nach einem Datenbankfehler.
Und normalerweise haben Sie großes Glück, wenn Sie
eine solche Fehlermeldung erhalten.
Normalerweise ist der Fehler nicht so aussagekräftig.
Manchmal werden Sie einfach feststellen,
dass die Seite nicht wie
erwartet funktioniert.
Manchmal ist es nur eine
Seite, die nicht so aussieht, wie sie sollte.
Wenn es sich beispielsweise um
eine Nachrichtenseite handelt, fehlt möglicherweise der Artikel, oder wenn
es sich um ein Blog handelt, fehlt einer der Beiträge oder
es gibt eine andere Art von Beiträgen.
Sie müssen also ein Auge darauf haben, was sich ändert.
In diesem Beispiel wird tatsächlich ein sehr netter Fehler angezeigt.
Es sagt uns, über welche Datei
es verfügt, und es sagt uns, dass die Anweisung einen Fehler enthält.
Und der Fehler in der Nähe des Anführungszeichens, das wir hinzugefügt haben.
Und es sagt uns auch, welche Anweisung ausgeführt wird.
Das ist wirklich gut zum Lernen.
Denn jetzt können wir sehen, was die
Aussage ist, dass das System versucht zu laufen.
Und die Systeme, die versuchen, eine Auswahl zu treffen *.
Es wird also versucht, alles aus Konten auszuwählen,
bei denen der Benutzername
Zaid und das Kennwort einem einfachen Anführungszeichen entspricht.
Beachten Sie außerdem, dass das System,
das die Webanwendung verwendet, den Namen
bereits in Anführungszeichen setzt.
Als ich Zaid sagte, fügte er Zaid zwischen zwei Anführungszeichen hinzu.
Und es fügte das
einfache Anführungszeichen hinzu, das ich zwischen zwei weiteren Anführungszeichen einfügte.
Deshalb haben wir hier drei Anführungszeichen.
Aus diesem Grund können
wir, wie bei 70% der Zielwebsite, eine
SQL-Injektion durchführen.
Wir sind uns
immer noch nicht sicher, ob es ausführen kann, was wir wollen.
Kann ich also tatsächlich
Code einfügen und ausführen lassen?
Mal sehen, ob wir das schaffen.
Der Benutzername wird also wieder Zaid sein.
Und was ich mit
dem Passwort machen werde, werde ich mein Passwort eingeben.
Also werde ich eins, zwei, drei, vier, fünf, sechs setzen
und dann schließe ich es.
Also werde ich Ihnen sagen,
warum ich es schließe, weil die aktuelle
Anweisung durch das System
ausgewählt * von, bis Zaid und,
gleich ist.
Und es wird ein einfaches Anführungszeichen für sich öffnen.
Nennen wir also dieses S-Passwort.
Wir behandeln dies also als Variable.
Und es braucht alles, was ich hier reingesteckt habe,
was ich in diese Kiste stecken werde.
Und es wird anstelle des S-Passworts eingefügt, das
eine Variable ist.
Ich gebe Ihnen nur eine
Idee, also müssen Sie sich vorstellen können, dass dies geschieht.
Es wird also alles nehmen, was ich da reingesteckt habe, und
es wird zwischen zwei einfache Anführungszeichen gesetzt.
Und es wird dort eingefügt und
auf dem System ausgeführt.
Also mache
ich eins, zwei, drei, vier, fünf, sechs
und füge das Zitat selbst hinzu.
Also, was ich jetzt tun werde, der
Code wird so sein.
Also wird es dies auswählen und das
Passwort ist gleich dem.
Und ich habe gerade zwei Zitate, okay.
Und dann werde
ich
sagen und eins ist gleich eins.
Man ist also gleich eins.
Und ich versuche nur
zu sehen, ob es ausgeführt wird, was ich möchte.
Meine derzeitige Aussage lautet also Select
* from accounts, wobei Benutzername gleich
Zaid und Passwort gleich
eins zwei drei vier fünf sechs ist.
Und beachte, ich füge das selbst ein
und eins gleich eins.
Ein Problem, über das sich das System beschweren
wird, ist, dass wir hier
ein zusätzliches Zitat haben, weil ich dieses selbst in das Textfeld einfügen werde.
Also wird es sich
darüber beschweren, es wird sagen, dass dies ein
offener Code ist und niemals geschlossen wurde.
Also werde ich den Kommentar hinzufügen.
Und wenn Sie einen Kommentar
hinzufügen, wird im Grunde alles, was nach dem
Kommentar eingeht, nicht ausgeführt.
Ich werde den Hash als Kommentar verwenden.
Alles, was nach dem Hash hereinkommt,
wird vom System ignoriert.
Also, ich werde jetzt injizieren, das wird es sein,
und das ist eins und das, also, wie ich sagte,
normalerweise hast du, was du hier hast,
dein Passwort durchgestrichen, oder abhängig davon, wie
das Programm es nennt, um es
dir nur vorzustellen Dies.
Und ich werde das hier reinstecken.
Wenn Sie das tun und es hineinstecken, wird
der Code so aussehen.
Also wird es aussehen wie der richtige
Benutzername, das
richtige Passwort und eins ist gleich eins, was wahr ist.
Und dann
wird es nicht, es wird dieses Zitat hier ignorieren.
Wenn wir dies
einfügen, sollten wir uns anmelden können.
Es sollte mir erlauben, mich einzuloggen.
Und perfekt, wir konnten uns einloggen und der Benutzername ist Zaid.
Bisher haben wir nichts getan.
Aber diese Art von zeigt uns, dass es unseren Code ausführt?
Versuchen wir etwas anderes.
Versuchen wir nun, eine falsche Aussage hinzuzufügen.
Also haben wir eins gleich eins gemacht,
und das war richtig und es wurde ausgeführt, wann wir wollten.
Versuchen wir, eins ist gleich zwei.
Und das ist falsch.
Ich habe also das richtige Passwort.
Und ich habe den richtigen
Benutzernamen und einer ist gleich zwei.
Und das sollte falsch sein, weil es falsch
ist, ist eins nicht gleich
zwei und ich benutze ein und so muss alles wahr sein.
Es sollte mir also
eine Fehlermeldung geben, obwohl ich den richtigen Benutzernamen und
das richtige Passwort eingeben werde.
Also setze ich eins zwei drei vier fünf
sechs und eins gleich zwei.
Also wird es so sein, oh, das ist falsch.
Und wie Sie sehen, hat es mir einen Authentifizierungsfehler,
einen falschen Benutzernamen oder
ein falsches Passwort gegeben, obwohl ich das richtige Passwort
und den richtigen Benutzernamen erhalten habe.
Dies bestätigt also, dass diese Website tatsächlich alles in
das Passwort einfügt, was wir wollen.
So können wir das Passwortfeld verwenden, um SQL-Code einzufügen.
Und es wird immer in dieser Form sein.
Also geben wir ein
Passwort ein und Sie geben Ihren Code hier
ein, also gebe ich ihn hier in Großbuchstaben ein.
Weil wir ein Passwort vergeben, das Zitat schließen
und dann den Code, den wir
ausführen möchten,
hier eingeben, und der wird auf dem Zielsystem ausgeführt.