MySQL-Webseiten wurden via SQL-Injection gehackt

Hacker Mehrere Webseiten des Datenbank-Dienstleisters MySQL wurden am Wochenende gehackt. Peinliches Detail für das Unternehmen: Die Angreifer hatten ausgerechnet mit einer SQL-Injection Erfolg. mehr...

Diese Nachricht vollständig anzeigen.

Jetzt einen Kommentar schreiben
 
Peinlich, peinlich...
 
...sind alle, die glauben das es perfekte Software gibt.
 
@knoxyz: Das hat nichts mit perfekter Software zu tun. Mysql ist das System, das hinter der Mysql-Seite steht, bei der implementation als Mysql-Team Fehler zu machen ist hingegen schon peinlich. :D
 
@knoxyz: ...sind alle, die immer behaupten dass OpenSource Software schon alleine durch die Tatsache dass sie quelloffen ist auch sicher ist.
 
http://pastebin.com/BayvYdcP - Da die nachricht der hacker
 
TJa. Die Ironie des Schicksals! Herrlich!
 
Ist ja fast so peinlich wie die Story mit Wikileaks und dieser Sicherheitsfirma. :)
 
@Mordy: war anonymous und die sicherheitsfirma .. aber passt shcon
 
@-adrian-: Danke für den Hinweis - Montag morgen und der erste Kaffee hat nicht gereicht. :D
 
die frage ist, liegt es an einem bug an mysql oder an der konfiguration des Servers?
 
@granworld: Bei einer SQL-Injection liegt der Fehler eher an einer fehlerhaften Programmierung (z.B. mit PHP) der Website. Dabei wurde dann in einem Formularfeld vergessen, die Eingabe des Benutzers zu prüfen. Somit wird die Eingabe direkt in einen SQL-String umgewandelt und an die Datenbank weitergereicht. Bei der Injection wird stattdessen ein eigener SQL-String mitgegeben, der die Datenbank kompromitieren soll.
 
@trashcoder: Genau deswegen finde ich es eigentlich auch nicht so peinlich wie dargestellt. Es ist ja das Frontend, welches die Sicherheitslücke beinhaltet und nicht die Datenbank an sich, was kann die MySQL-Datenbank dafür, dass sie tut, was sie soll?
 
@timmy: Ich frag mich auch wieso das als so "peinlich" abgestempelt wird, schließlich war der Fehler nicht in der Datenbank. Ich wuerde so eine Aktion auf php.net peinlicher finden ;D
 
@timmy: Es ist peinlich, weil das Problem der SQL Injection schon lange bekannt ist und die Datenbankhersteller zu Recht eine Weile schon die Programmierer drauf hinweisen. Wenn nun wie hier der Datenbankhersteller selbst aber das nicht beachtet, ist das nun mal peinlich. Peinlich für die MySQL-Webseitenprogrammierer und damit die MySQL-Firma, nicht für die MySQL-Datenbank.
 
@trashcoder: danke für die erklärung.
 
@trashcoder: Mal ne Frage: Wie kann ich denn derartige Sachen verhindern? Langt da mysql_escape_string($_POST['eingabedesusers']), wenn man es in die DB einfügt? Bei Eingaben, wo Zahlenwerte erwartet werden, kann man ja intval() nehmen.
 
@BajK511: erstens sollte man wenn überhaupt mysql_real_escape_string() verwenden, weil die von dir genannte veraltet ist. 2. können dann immer noch Strichpunkte drinnen sein. ich hab da zwar schon ne Zeit lang nichts mehr gemacht, aber Strichpunkte in SQL-Statements zuzulassen ist nicht gut (außer das ist dann auch schon entschärft durch das escapen) Nimmt mysql Werte auch ohne Anführungsstriche an?
 
@BajK511: Ich bin da jetzt kein Fachmann mit PHP, aber es gibt im Internet genug Seiten die sich mit SQL-Injection-Prevention und PHP beschäftigen.
Update: Schau dir mal diese Seite an:
http://php.net/manual/de/security.database.sql-injection.php
 
@BajK511: Also in ziemlich allen Programmiersprachen mit denen ich zu tun hatte, gibt es die Möglichkeit, Werte(Eingaben des Benutzers) als Parameter zu definieren. Diese Werte werden auf keinen Fall ausgeführt, sondern werden als Werte behandelt, oder entsprechend geprüft. Somit ist eine SQL-Injektion von vorn herein ausgeschlossen.
Ich hoffe mal, dass PHP das auch kann ;)
 
@Straßenkobra: Selbst wenn PHP das könnte, ändert das nichts an der Tatsache, dass du es dem MYSQL-Server sagen müsstest, dass das ein Wert und kein Befehl ist. das Problem liegt weniger bei PHP als bei dem Server, das eben die Befehle in Textform vom PHP erhält. Wenn du halt dann eingibst mysql_query('UPDATE comments SET content = \'' . $_POST['comment'] . '\' WHERE id = ' . $_GET['commentid']); und dann aber der user als comment eben "'; DROP DATABASE winfuture; -- eingibt, dann bringt dir auch das nichts, da musst du dafür sorgen, dass eben die Anführungszeichen nicht vom Mysql-Server interpretiert werden, der somit den String schließt und dann Kommandos akzeptiert.
 
@BajK511: Ich glaube du hast nicht ganz verstanden was ich meinte :/
In "anderen" Programmiersprachen macht man sowas ähnliches wie (Pseudocode!):
Query.SQL = "SELECT NAME From Person where ID = @ID";
Query.SetParameter("ID", "123");

Die Query weiß dann schon von selbst, dass er nicht ausführen soll, was in diesem Parameter steht.
 
Ändert nichts an der Tatsache, dass der Server ein eingeführten Parameter "5; DROP DATABASE `blabla`; --" ausführen wird, denn das liegt NICHT im Einflussbereich von PHP!
 
@Straßenkobra: jupp gibt es und nennt sich PDO

http://de.wikipedia.org/wiki/PHP_Data_Objects
 
Kann mir jemand mal erklären, warum die Eingabe des Users generell auf Sonderzeichen überprüft werden muss, und die Sonderzeichen zu 90% nicht erwünscht sind? Generell könnte man doch Sonderzeichen erstmal nicht zulassen, außer wenn es expliziet angegeben wird. Wäre doch viel einfacher und sicherer, oder?
 
@CherryCoke: Prinzipiell müssten ein paar ganz bestimmte Zeichen ersetzt werden, z.B. ' durch \' - dann passiert nichts mehr und sämtliche Sonderzeichen dürften als String verwendet werden.
 
@Lofote: in der MySQL-Erweiterung für PHP gibt es doch einen solchen Befehl, der das in einem Rutsch macht: mysql_real_escape_string() oder so (ich selbst lese mich gerade in PHP und PostgreSQL ein, da gibt es die Funktion pg_excape_string, die das gleiche für PostgreSQL macht).
 
@CherryCoke: Um Sonderzeichen zu verbieten MUSST du aber die Eingaben auf Sonderzeichen prüfen ;-)
 
@CherryCoke: Weil eine White-List um einiges komplizierter ist als eine Black-List der besagten Sonder-/Steuerzeichen.
 
Das einzig wirklich peinliche daran waren die Passworte der Verantwortlichen.
 
Wie ist denn der Code für SQL Injection?
 
@ChuckNorris050285: http://de.wikipedia.org/wiki/SQL_Injection
 
@ChuckNorris050285: Bitte was?
 
@ChuckNorris050285: '; DROP DATABASE `datenbankname`; --
 
Datenbänken, lustiger tippfehler ^^
 
@Lindheimer: Scheint jetzt behoben. Danke.
 
dachte seit mysqli ist das nicht mehr möglich, und mit pdo + prepared statements erst recht... wohl alte scripte/codes auf den seiten...
Kommentar abgeben Netiquette beachten!

Video-Empfehlungen

WinFuture Mobil

WinFuture.mbo QR-Code Auch Unterwegs bestens informiert!
Nachrichten und Kommentare auf
dem Smartphone lesen.

Folgt uns auf Twitter

WinFuture bei Twitter

Interessante Artikel & Testberichte

WinFuture wird gehostet von Artfiles