1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer 25.11.2005.

Slides:



Advertisements
Ähnliche Präsentationen
SQL Injection – Funktionsweise und Gegenmaßnahmen
Advertisements

Object Relational Mapping
ER-Datenmodell und Abfragen in SQL
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
Relationale Datenbank MySQL
MySQL.
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Seite 1Maria, Philipp, Herbert Seite 1 Fitnessplaner Ziele: >Fitnessplaner für Onlinebetrieb >Registrierung >individuelle Trainingsplanerstellung.
SendEplanung Datenbank
SQL als Abfragesprache
SQL als Abfragesprache
MySQL Der Einstieg.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Dynamische Webseiten mit PHP
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
Datenintegrität Referentielle Integrität create table
Erhard Künzel für Info 9. Klasse: digitale-schule-bayern.de © Erhard Künzel.
Einführung MySQL mit PHP
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Einführung und Überblick
SQL-Tutorium Ernst Rodlmayr.
... und alles was dazugehört
ODBC (Open Database Connectivity)
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Wir bauen uns eine Webapplikation!
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
SQL Überblick Abfragen aus einer Tabelle
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
Vorlesung #4 SQL (Teil 1).
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
Datenbanksysteme für hörer anderer Fachrichtungen
Einführung in Datenbankmodellierung und SQL
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
Einführung in PHP.
Einführung in PHP 5.
Webseiten mit PHP, SQL, XML und Webservices Anhand praktischer Beispiele.
Datenbankanbindung mit
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Vorlesung #5 SQL (Teil 2).
PHP:: Hypertext Preprocessor Einführung Praxis. PHP:: Hypertext Preprocessor Jetzt mal von der anderen Seite © All rights reversed2 PHP:: Hypertext Preprocessor.
Quelle: xkcd.com SQL Injections.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
Datenbank System (DBS) - Warum?
Dynamische Webseiten mit MySql und PHP
PHPmyadmin Maya Kindler 6c.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
Rechen- und Kommunikationszentrum (RZ) Sicherheitsorientierte Webentwicklung am Beispiel der Matse-Dienste Jan-Frederic Janssen.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Entwicklung einer Webapplikation mittels HTML, PHP, MySQL, jQuery, und Smarty-Templates am Beispiel einer Studienarbeitsverwaltung.
PHP Schulung Beginner Newthinking Store GmbH Manuel Blechschmidt.
Sicherheit in Webanwendungen „CrossSite“, „Session“ und „SQL“ Angriffstechniken und Abwehrmaßnahmen Mario Klump.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
SQL Basics Schulung –
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Abfragesprache SQL in ORACLE
Beispiele zur Datenänderung
Create Table, Rechte und Rollen
Indexierung Oracle: indexes Indexierung.
Unterschiedliche Kontrollstrukturen
Die erste Form der INSERT-Anweisung dient der Neueingabe von Daten:
Von Wietlisbach, Lenzin und Winter
(Structured Query Language)
 Präsentation transkript:

1 PS The Weakest Link: SQL Injections Vortrag: SQL Injections Dominik Oepen und Sebastian Höfer

2 PS The Weakest Link: SQL Injections 1. Einleitung 2. Einführung SQL/PHP 3. SQL Injections/Blindfolded Injections 4. Schutzmaßnahmen Gliederung

3 PS The Weakest Link: SQL Injections Was sind SQL Injections? ● Einschleusen von SQL Befehlen in Webapplikationen (PHP, ASP, JSP) ● Sicherheitslücken entstehen, wenn Nutzereingaben ungeprüft angenommen werden.

4 PS The Weakest Link: SQL Injections Warum PHP? ● Serverseitige Skriptsprache ● Leicht zu erlernen ● Trotzdem großer Funktionsumfang: ● Unterstützt OOP ● Sehr gute Anbindung an MS SQL, MySQL u. a. Datenbanken

5 PS The Weakest Link: SQL Injections Was sind die Gefahren? ● Selbst unerfahrene Programmierer können in PHP und einem Datenbanksystem entwickeln ● “Spaghetticode” ● Keine Einhaltung von Sicherheitsstandards ● Kein Bewusstsein für mögliche Risiken

6 PS The Weakest Link: SQL Injections Einführung in SQL

7 PS The Weakest Link: SQL Injections 1. Was ist eine relationale Datenbank? 2. Welche SQL-Dialekte gibt es? 3. Wie erhalte ich Daten? 4. Wie manipuliere ich Daten? Einführung in SQL

8 PS The Weakest Link: SQL Injections Was ist eine relationale Datenbank? Primärschlüssel Attribut e Beispiel: Tabelle student Attributwert e

9 PS The Weakest Link: SQL Injections Welche SQL-Dialekte gibt es? SQL = Structured Query Language Es werden Anfragen (Queries) an den Server gesendet, um Daten zu erhalten oder manipulieren ● Dialekte (hier betrachtete): ● Transact SQL (Microsoft) ● MySQL (Open Source) ● Weitere Dialekte: ● PostgreSQL, Oracle, DB2, u. v. a.

10 PS The Weakest Link: SQL Injections Welche SQL-Dialekte gibt es? ● Grundlegende Syntax: ● Intuitiv an englische Sprache angelehnt ● Anfragen enden mit ; ● Aber: Skriptsprachen wie PHP fügen ; selbst hinzu ● Eingegebene String-Werte in Hochkommata eingeschlossen ● Kommentarzeichen ● Transact SQL: -- ● MySQL: #

11 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Der SELECT- Befehl Syntax (Auszug): SELECT select_expr [FROM table_references [WHERE where_definition] [GROUP BY {col_name | expr | position} [HAVING where_definition]] [LIMIT {[offset,] row_count}]

12 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Einfache Anfragen SELECT * FROM student... gibt alle Daten aus unserer Beispieltabelle aus:

13 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT vorname, studienfach FROM student WHERE name = 'Oepen'... gibt aus:

14 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT 1+1;... geht auch:

15 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Komplexere Anfragen SELECT in Kombination mit ● UNION = Vereinigung (mengentheoretisch) ● GROUP BY und HAVING ● Gruppieren, um Aggregatsfunktionen auszuführen (gleich mehr dazu)

16 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? Beispiel: Neue Tabelle lehrender Zur Erinnerung : Alte Tabelle student

17 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT * FROM student UNION SELECT id, name, vorname, titel FROM lehrender... ergibt:

18 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT titel, count(*) FROM lehrender GROUP BY titel... ergibt:

19 PS The Weakest Link: SQL Injections Wie erhalte ich Daten? SELECT titel, count(*) FROM lehrender GROUP BY titel HAVING count(*) > 1... ergibt:

20 PS The Weakest Link: SQL Injections Wie manipuliere ich Daten? ● INSERT ● Anlegen eines neuen Datensatzes ● UPDATE ● Ändern eines bestehenden Datensatzes ● DELETE ● Löschen eines bestehenden Datensatzes ● DROP TABLE ● Gesamte Tabelle löschen

21 PS The Weakest Link: SQL Injections Wie manipuliere ich Daten? ● Intuitive Schreibweise, Beispiele: ● INSERT INTO student (vorname, name, studienfach) VALUES ('Karl', 'Ranseier', 'BWL') ● UPDATE student SET vorname = 'Peter' WHERE name = 'Oepen' ● DROP TABLE student;

22 PS The Weakest Link: SQL Injections Einführung in PHP

23 PS The Weakest Link: SQL Injections Wie sieht PHP-Code aus? Beispiel: PHP-Test <?php $mystring = “3 + 3 = ”; $i = 6; echo $mystring.$i; ?>

24 PS The Weakest Link: SQL Injections Wie sieht PHP-Code aus? ● PHP-Code kann an jeder beliebigen Stelle im HTML-Code eingebettet werden (in eingeschlossen) ● Variablenbezeichner beginnen mit $ ● Ansonsten: Syntax stark angelehnt an C ● Kontrollstrukturen (if, switch) ● Schleifen (z. B. while, do-while, for) ● Funktionen / Prozeduren ● Aber: Es gibt keine expliziten Datentypen

25 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen

26 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen [...] Username: Password: [...] Unser HTML-Formular: Beispiel: PHP und MySQL

27 PS The Weakest Link: SQL Injections Interaktion von PHP mit Datenbanksystemen [...] $db_hdl = mysql_connect("localhost", "phpuser", "phpuser"); mysql_select_db("weakestlink", $db_hdl); $username = $_POST['username']; $password = $_POST['password']; // Query aufstellen $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $res = mysql_query($query, $db_hdl); [...] Beispiel: PHP und MySQL Neue login.php

28 PS The Weakest Link: SQL Injections SQL Injections

29 PS The Weakest Link: SQL Injections Einschleusung von SQL Befehlen ● SQL Syntax: Strings in ' ● Angreifer beendet String durch Eingabe von ' gefolgt von SQL Code ● Setzen von Kommentarzeichen deaktiviert restliches Query ● Interpretation durch SQL Server als Teil des Queries

30 PS The Weakest Link: SQL Injections Beispiel: Query: var $query = "SELECT * FROM users WHERE username = '$username' AND password = ' $password'”; Eingabe: MS SQL: admin'-- MySQL: admin'#

31 PS The Weakest Link: SQL Injections Beispiel Erzeugt Query: SELECT * FROM users WHERE username = 'admin'--' AND password = ' $password'

32 PS The Weakest Link: SQL Injections Generelle Vorgehensweise 1. Verwundbare Parameter identifizieren 2. Identifizierung der Datenbankstruktur 3. Durchführung der gewünschten Injection

33 PS The Weakest Link: SQL Injections Identifizierung der DB Struktur ● Meistens Informationen durch Fehlermeldungen sammeln ● Absichtlich falsche SQL Statements werden injeziert ● Fehlermeldungen enthalten oft Informationen über DB Struktur

34 PS The Weakest Link: SQL Injections Identifizierung der DB Struktur ● HAVING: Schlägt fehl, falls GROUP BY fehlt. In der erzeugten Fehlermeldung werden Name der Tabelle und des Attributes ausgegeben Beispiel:

35 PS The Weakest Link: SQL Injections Welche Injections gibt es? ● INSERT/UPDATE: Manipulation von Daten ● UNION SELECT: Ausspähen von Daten ● DROP TABLE: Löschen von Daten

36 PS The Weakest Link: SQL Injections Ausblick: Was geht noch? ● Absetzen von Kommandos auf dem Server (xp_cmdshell) ● Auslesen/Manipulieren der Registry (xp_regread) ● Textdateien auf Server erstellen (bcp) oder lesen (bulk insert) Abhängig von Serversystem/DB System:

37 PS The Weakest Link: SQL Injections Blindfolded SQL Injections

38 PS The Weakest Link: SQL Injections Blindfolded SQL Injections ● Zum Schutz vor SQL Injections werden häufig Fehlermeldungen unterdrückt ● SQL Injections auch möglich ohne Fehlermeldungen

39 PS The Weakest Link: SQL Injections Blindfolded SQL Injections ● Angreifer testet Parameter auf mögliche Injections, ohne Fehlermeldungen auszuwerten ● Trial and Error Prinzip ● Angriffe sind aufwendiger, aber immer noch praktikabel

40 PS The Weakest Link: SQL Injections Generelle Vorgehensweise 1. Identifizierung des DB Systems 2. Verwundbare Parameter identifizieren 3. Struktur des SQL Queries erraten 4. Struktur der DB/Tabellen identifizieren 5. Durchführung der gewünschten Injection

41 PS The Weakest Link: SQL Injections DB System identifizieren ● Unterschiedliche DB Systeme verwenden leicht unterschiedliche Syntax ● Wenn eine Webapplikation spezielle Syntax akzeptiert, weiß man welches DB System verwendet wird ● Beispiel: String Konkatenation (MS “+”, Oracle “||”)

42 PS The Weakest Link: SQL Injections Struktur des Queries raten Beispiel SELECT... WHERE: ● WHERE Statement ist boolscher Ausdruck ● Kann durch injezierte AND bzw. OR Ausdrücke wahr oder falsch gemacht werden ● Scheitern Statements, die eigtl. wahr sein sollten, liegt dies an der Syntax (Bsp. nicht gematchte Klammern)

43 PS The Weakest Link: SQL Injections Schutzmaßnahmen

44 PS The Weakest Link: SQL Injections Überblick Schutzmaßnahmen 1.Implementierte Sicherheitsfeatures 2.Weitere Schutzmaßnahmen 3.Fazit

45 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: magic_quotes_gpc ● Maskiert Eingaben von GET POST und COOKIE ● Escapes für: ' “ \ und NUL ● Wird in der php.ini aktiviert (default)

46 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: magic_quotes_gpc ● Wenn aktiv, sind SQL Injections grundsätzlich nicht mehr möglich ● Aber: magic_quotes + eigene Maskierungsfunktionen verfälschen Eingabe ● Wird häufig deaktiviert, um z.B. Namen wie O'Neil zuzulassen

47 PS The Weakest Link: SQL Injections Sicherheitsfeatures PHP: ● mysql.trace_mode: Schalter in php.ini ● SQL Syntaxfehler werden nicht mehr ausgegeben, falls Schalter auf off (default) ● Kein Query Stacking

48 PS The Weakest Link: SQL Injections Sicherheitsfeatures MySQL und trace.mode = on: ● Weniger aufschlussreiche Fehlermeldungen ● Bsp: HAVING Fehlermeldung liefert nicht Name und Typ des Tabelleneintrags

49 PS The Weakest Link: SQL Injections Unausgereifte Schutzmaßnahmen ● Begrenzung der Eingabelänge ● “Schlechten” Input zurückweisen (Blacklist) ● Nur “guten” Input akzeptieren (Whitelist)

50 PS The Weakest Link: SQL Injections Schutzmaßnahmen ● Fazit: ● Unterdrückung von Fehlern kein absoluter Schutz, aber hilfreich ● Bester Schutz: Saubere Programmierung ● Kombination von Whitelist und Blacklist: Überprüfen aller übergebenen Parameter!

51 PS The Weakest Link: SQL Injections Quellen: ● Offizielle MySQL 5.0 Reference: an/5.0/en/ an/5.0/en/ ● Offizielle PHP Referenz: ● ● Chris Anley: Advanced SQL Injections ● Chris Anley: Hackproofing MySQL ● Ofer Maor, Amichai Shulman: Blindfolded SQL Injections