Frage von PeterMagic, 36

Was sind SQL Injections und wofür sind sie da?

Wie macht man sowas? es were zwar kein Problem an tutorials ranzukommen ( NICHT YOUTUBE) aber da ich mich da nicht auskenne will ich mal Fragen was da abläuft

Antwort
von Unsinkable2, 7

Was sind SQL Injections

Typischerweise fragen heutige Anwendungen viele Daten aus Datenbanken ab. Die dabei am häufigsten benutzte Sprache ist SQL, also die "Structured Query Language".

Mit Hilfe einiger Tricks kann man dabei Manipulationen anwenden, die zusammen mit regulären Abfragen an die Datenbank abgeschickt werden.

wofür sind sie da?

Bei unsauber programmierten Anwendungen ist es beispielsweise möglich, diese SQL-Abfragen an die Datenbank (beispielsweise: "Stimmen Benutzername und Passwort? Darf ich den Benutzer einloggen?") so zu manipulieren, dass dieser Benutzer Zugriffsrechte erhält, obwohl er gar nicht befugt ist.

Man kann damit aber auch richtig bösen Schaden anrichten: Webseiten und Anwendungen "entführen", Daten klauen, Daten beschädigen oder zerstören, Administrator-Zugriff erlangen, ... es gibt eine ganze Palette an Möglichkeiten, die SQL-Injection aufmachen kann.

---------------------------------------

Wie macht man sowas?

Bleiben wir beim Beispiel "Login":

Angenommen, du hast das Passwort für den Zugang zu einer Webseite vergessen; aber du weißt noch, wie der Benutzername lautete.

Eine schlecht programmierte Abfrage würde etwa so lauten:

SELECT (1) FROM UserTable 
WHERE UserName =  Textfeld_User.Text  
AND Password = Textfeld_Password.Text

Den Benutzernamen kennst du, also kannst du ihn in das Textfeld_User eintragen. Sagen wir, er lautet "abc123".

Das Passwort lautet für diesen Benutzer "zyx987". Doch das hast du vergessen. Also nutzt du SQL-Injection, um dafür zu sorgen, dass die Antwort der Datenbank immer richtig ist. 

Du trägst also in das Textfeld_Password folgendes ein:

' OR 'a' = 'a'

Damit lautet die gesamte Abfrage an die Datenbank so:

SELECT (1) FROM UserTable
WHERE UserName = 'abc123'
AND Password = '' OR 'a' = 'a'

 Die Datenbank erhält diese Anfrage von der Anwendung und prüft nun:

Username = 'abc123'? ... Yep! Habe ich! 

Und natürlich wird auch das Passwort geprüft:

Password = ''? ... Mööööp! Falsch! Das Passwort ist leer!

Hier würde ein Fehler ausgegeben werden und die Anwendung würde sagen, dass du dich wohl beim Passwort geirrt haben musst, denn das Passwort ist leer. Und tatsächlich müsste es, sagen wir, "zyx987" lauten.

Doch dank SQL-Injection hast du dir eine Hintertür aufgemacht:

ODER stimmt die Behauptung "a = a"? ... Richtig! Diese Antwort ist gültig.

Die Abfrage kommt also zu folgendem Ergebnis:

SELECT (1) FROM UserTable
WHERE [richtig]
AND [falsch] OR [richtig]

Und weil "richtig + falsch oder richtig" in der Logik der Computer immer "richtig" ist, freut sich die Datenbank, der Anwendung mitteilen zu können:

Yep, den kenne ich! Dieser Benutzer ist gültig.

Du hast dir also Zugang zum Benutzer "abc123" verschafft, obwohl du das Passwort gar nicht kennst.

------------------------------------

Und bevor du das jetzt ausprobieren gehst, noch ein paar Hinweise:

Es ist STRAFBAR, das auf fremden Webseiten oder in fremden Anwendungen zu machen. Es ist sogar STRAFBAR, es nur zu versuchen. Das gilt auch, wenn du auf diesem Weg Zugriff auf deine eigenen Accounts auf fremden Webseiten oder in fremden Anwendungen nehmen willst.

Also benutze es NUR - und AUSSCHLIESSLICH - zu Hause an deinem eigenen Rechner mit deiner eigenen Software-Bastelei.

Darüber hinaus wirst du nur wenig Glück haben: Moderne Anwendungen; gerade die von professionelleren Herstellern, haben Schutzmechanismen dagegen. (Tatsächlich ist es sogar sehr einfach, sich dagegen zu schützen.)

Selbst bei solchen Anwendungen IST SCHON DER VERSUCH STRAFBAR. Und diesen Versuch kann man leicht aufzeichnen und gegebenenfalls bis zu deiner Wohnung zurückverfolgen. 

Und im aktuellen "Cyberkriegs-Hype" sind die Gerichte nicht zimperlich, wenn es um solche Sachen geht; ganz besonders, wenn du es bei den falschen Eigentümern von Anwendungen oder Websites versuchst... 

Kommentar von DronenKevin420 ,

Genau meine Rede :)

Antwort
von techniqueFreak, 22

Hallo PeterMagic,

bei der SQL Injection handelt es sich um ein Angriffsszenario was du auf verschiedene Web Apps fahren könntest. Dabei geht es vorrangig darum, die Benutzereingaben auszunutzen, in der Hoffnung sie werden genau so an die Datenbank weitergeleitet.

Hier wird dann mit Kommentaren gearbeitet, die den eigentlich Befehl beenden und das Feld frei machen für SQL Statements um die Datenbank zu manipulieren. Ein drop Table würde dann diese z.B. platt machen ..

Baut die Website auf ein einigermaßen verbreitetes CMS aus, sind diese Art der Angriffe meistens gefiltert und neutralisiert. Es ist nicht mehr so schlimm wie damals. Typo3 und Wordpress sollten nicht anfällig dafür sein, auch wenn solche Lücken regelmäßig auftauchen.

Grüße aus dem Pott,

chris

Antwort
von Suboptimierer, 19

Schlecht programmierte Webseiten können damit angegriffen werden. Zuerst wird ein Fehler provoziert, indem man das Textendezeichen oder kommentareinleitende Zeichen in ein Eingabefeld schreibt, dessen In einem SQL verwandt wird.

Dann sieht man die Tabellenbezeichnungen und Spaltennamen in der Fehlermeldung. Auf diesem Weg können dann bis zu beliebige Daten abgefragt werden, u. a. die (Zugangs-)Daten anderer User. Im schlimmsten Fall können sogar datenverändernde SQL-Befehle gegen die Datenbank gefeuert werden.

Antwort
von LeCux, 18

Generell durch ungeprüfte Eingaben die an die Datenbank geschickt werden.

Mittels SQL, Kommentar und Semikolon kann man dann alle Queries ausführen, mit entsprechenden Problem für die Sicherheit.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten