SQL-Injections#

../../_images/bruecke-postdam-westkreuz.jpg

WICHTIGER HINWEIS:

Diese Befehle niemals für ein fremdes System anwenden, weil strafrechtlich relevant!

Schutzmaßnahmen:

  • Prüfen, welche Software ich einsetze!

    Beispiel Sicherheitslücken in Zimbra

    Alternativen prüfen und/oder Sicherheitswarnungen verfolgen und schnell reagieren!

  • Eingaben prüfen!

    Wordpress – Eingabeprüfung im Plugin

    • Maßnahmen wie

      • Pingback, Talkback und RPC nicht nutzen

      • REST-API mit JSON

      • Zugang zum Backend nicht über offensichtliche URLs!

  • streng typisierte Abfragen

  • sichere API verwenden

  • keine internen ID’s der Datenbanken im Webinterface verwenden, besser einen Index, indirekte Referenzen oder andere indirekte Methoden verwenden

  • Fehlermeldungen geben oft zu viele Informationen über das System preis (prüfen Sie Fehlerseiten nach Fehleingaben)!

  • keine eigenen kryptischen Verfahren anwenden, sondern allgemein anerkannte wie AES, RSA, SHA-​256 oder besser…

Die am häufigsten ausgenutzten Schwachstellen sind laut http://cwe.mitre.org/top25/index.html

SELECT userid
FROM users
WHERE  user = 'foo' AND password = 'password' OR '1' = '1';


SELECT *
FROM items
WHERE user = 'koppatz' AND itemname = 'wichtig' OR 'a'='a';

Mit dem angehängten OR wird jede Aussage wahr und deshalb ausgeführt. Sie verkürzt sich dann zu:

SELECT *
FROM items;

Prüfen der ID#

  • Hier wird die ID in der Abfrage verwendet.

  • Wo ist die Prüfung, ob die ID zu einem konkreten Kunden gehört?

  • Hier könnte jede ID eingefügt werden, dann auch solche, die nicht zu einem Konkreten Kunden gehören.

SELECT * FROM
invoices WHERE id = parameter1

Besser:

SELECT * FROM
rechnung WHERE id = parameter1
AND kunde = parameter2

Andere Quellen#

Folien: