2016-06-05 9 views
3

Ich habe eine einfache Web-Anwendung in Asp mit SQL Server Back-End-Datenbank. Die Login-Seite hat einen Injektionspunkt und ich kann die Anmeldung mit dem üblichen "ODER 1 = 1" umgehen. Jetzt konnte ich die Spalten in der Datenbank mit den Anweisungen GROUP BY und HAVING aufzählen. Ich konnte die Information in dem Fehler, der auf mich geworfen wurde, aufzählen.SQL Server-Datenbank-Injektion

` ' or '1' = '1' GROUP BY tblCustomers.cust_id, tblCustomers.cust_name, tblCustomers.cust_password, tblCustomers.cust_account 
HAVING 1=1 -- ` 

Ich bin in der Lernphase, und ich fand heraus, dass die cust_id, cust_name, cust_password, cust_account die Spalten und tblCustomers ist der Name der Tabelle.

Ich bin auch in der Lage, AND-Anweisungen zusammen mit der Konvertierungsfunktion zu verwenden, um einige Informationen aufzuzählen. Der Befehl, den ich benutzte, ist ' or '1' = '1' and 1 =convert(int,@@version)-- und wieder bin ich in der Lage, die Information in den Fehlern zu erhalten.

Nun, wie kann ich die Einträge in der Datenbank ausgeben, um zumindest den Kundennamen und das Passwort zu kennen? Ich habe Stapelabfragen versucht, die durch Semikolon getrennt sind, aber nach der ersten Abfrage, dh 'OR 1 = 1 logge ich mich einfach ein und sehe keine Ausgabe als ihren anderen Parameter, ich kann sie nirgendwo sonst auf der Seite ausgeben (es gibt keine Parameter und ihre nur eine leere Seite nach dem ich mich anmelde). UNION SELECT funktioniert nicht, da ich die erste SELECT-Anweisung und ihre Exits nicht erraten kann. Alle Funktionen, die mir helfen können, die Kundennamen und das Passwort zu löschen?

Ich werde wirklich jede Hilfe mit diesem schätzen. Vielen Dank.

+0

Machen Sie die 1. Abfrage Anmeldung nicht zulassen. d. h. anstelle von "oder 1 = 1" schreibe "und 1 <1", dann die nächste Aussage. Wenn ich richtig verstehe, wo Sie injizieren können, wird die Anmeldung fehlschlagen und Sie werden Ihren Speicherauszug bekommen (hoffentlich, aber hängt von dem Portal ab, an dem Sie herumspielen). EDIT: BTW warum geben Sie richtige Benutzer/Pwd Combo, wenn Sie die Abfrage fehlschlagen wollen? + Sie können die Login-Abfrage irgendwie herausfinden, es sollte sehr einfach sein (Benutzername und Passwort, vielleicht?) –

+0

Danke Mark. Ich habe deinen Vorschlag ausprobiert. 'und 1 <1; SELECT * from tblCustomers 'diesmal schlägt die Anmeldung fehl und ich komme wieder zur Anmeldeaufforderung. Es ist nur eine Lern-Web-Anwendung, so dass es absolut nichts mehr gibt, sobald man sich einloggen kann. – Tim

+0

Ich füge das als Antwort hinzu, danke, wenn du akzeptierst;) –

Antwort

0

Lassen Sie die erste Abfrage die Anmeldung verbieten. h. anstelle von "oder 1 = 1" schreibe "und 1 < 1", dann die nächste Aussage. Wenn ich richtig verstehe, wo Sie injizieren können, wird die Anmeldung fehlschlagen und Sie werden Ihren Speicherauszug bekommen (hoffentlich, aber hängt von dem Portal ab, an dem Sie herumspielen). EDIT: BTW warum geben Sie richtige Benutzer/Pwd Combo, wenn Sie die Abfrage fehlschlagen wollen? + Sie können irgendwie herausfinden, die Login-Abfrage, sollte es sehr einfach sein (Benutzername & Passwort, vielleicht?)