44
Hochschule Wismar University of Technology, Business and Design Fakultät für Ingenieurwissenschaften Eingereicht am: 15. Februar 2020 von: C.G. Hausarbeit im Modul Datenbanken II: Forensik in DBS Wintersemester 2019/20 Modulverantwortliche Dozentin: Prof. Dr.-Ing. Antje Raab-Düsterhöft

Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Hochschule Wismar

University of Technology, Business and Design

Fakultät für Ingenieurwissenschaften

Eingereicht am: 15. Februar 2020

von: C.G.

Hausarbeit

im Modul

Datenbanken II: Forensik in DBS

Wintersemester 2019/20

Modulverantwortliche Dozentin:

Prof. Dr.-Ing. Antje Raab-Düsterhöft

Page 2: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Aufgabenstellung

1 Aufgabenstellung

Die Aufgabenstellung ergibt sich aus folgenden zwei Abschnitten des Studienbriefes

„Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen

aus den Folien des zweiten Webinars vom 21.01.2020.

3.Hinweise zur Prüfungsleistung (Studienbrief)

Die Prüfung in diesem Modul wird von Ihnen als APL (Alternative Prüfungsleistung)

abgeleistet und besteht aus 2 Teilen: Zum einen haben Sie eine schriftliche Hausarbeit zu

erstellen […]

Die schriftliche Hausarbeit ist in Form eines Projektberichtes zu erstellen. In der

Hausarbeit werden Sie

- Ihre praktischen Vorgehensweisen dokumentieren und

- einen Fachbegriff für den Forensik-Wiki (https://it-forensik.fiw.hswismar.de)

definieren

Die Hausarbeit sollte mindestens ca. 20 Seiten oder mehr umfassen, muss aber NICHT

den Anforderungen an einen wissenschaftlichen Artikel entsprechen. […]

4.3 Erstellung der Hausarbeit (Studienbrief)

Lesen und arbeiten Sie

1. den Inhalt des Lehrbriefes und

2. die Bachelor Thesis von Herrn Christian Hense zum Thema „SQL Injektion“ durch

und insbesondere auch das Buch von Justin Clarke „SQL-Injektion“ (Clarke, Justin. SQL

Hacking . München, Germany: Franzis Verlag GmbH, 2016. 978-3-645-60466-6., als

PDF auf der Hense-VM verfügbar) und

3. die SQL-Injektion-Beispiele in der OVA-Umgebung zur Hense-BT anhand zweier

unterschiedlicher Datenbanksysteme durch. Dokumentieren Sie diese mit Screenshots!

4. Wählen Sie wieder zwei Datenbanksysteme und

4.1 Installieren Sie Ihre eigene Beispiel-Datenbank (Schema, Daten) in diesen zwei DBS

4.2 Führen Sie jeweils 5 Beispiele für SQL-Injektion auf Ihrer Datenbank aus und

arbeiten Sie diese Vorfälle forensisch auf; d.h. suchen Sie nach Quellen, in denen diese

Vorfälle nachgewiesen werden können.

Page 3: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Aufgabenstellung

3

4.3 Dokumentieren Sie Ihr gesamtes Vorgehen!

Ergänzungen Webinar 21.01.20 (Folie 3 - 1. Ergänzung zum 1. Webinar/ Fragen)

• Zu untersuchenden Aspekte

1. Ausspähen von Daten

2. Veränderung von Daten

3. Datenbank-Server verändern

4. Änderungen am Filesystem

5. Einschleusen von beliebigem Code

• Für jeweils 2 unterschiedliche DBS auf der VM

• Für Ihr eigenes DBS

Page 4: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Inhalt

4

2 Inhalt

3 Einleitung und Wahl des Fachbegriffes für das Forensik-Wiki .............................................................. 6

3.1 Error Based SQL Injection (fehlerbasierte SQL Injektion) ......................................................... 6

4 Vorbereitungen ....................................................................................................................................... 7

4.1 Download der VM ....................................................................................................................... 7

4.2 Bereitstellung der VM in eigener Umgebung .............................................................................. 9

4.3 Download des Buches ................................................................................................................. 9

5 Teil I der Aufgabenstellung .................................................................................................................. 10

5.1 Ausspähen von Daten ................................................................................................................ 10

5.1.1 MySQL ........................................................................................................................... 10

5.1.2 PostgreSQL .................................................................................................................... 11

5.2 Veränderung von Daten ............................................................................................................. 13

5.2.1 MySQL ........................................................................................................................... 13

5.2.2 PostgreSQL .................................................................................................................... 15

5.3 Datenbank-Server verändern ..................................................................................................... 16

5.3.1 MySQL ........................................................................................................................... 16

5.3.2 PostgreSQL .................................................................................................................... 17

5.4 Änderungen am Filesystem ....................................................................................................... 18

5.4.1 MySQL ........................................................................................................................... 18

5.4.2 PostgreSQL .................................................................................................................... 20

5.5 Einschleusen von beliebigem Code ........................................................................................... 22

5.5.1 MySQL ........................................................................................................................... 22

5.5.2 PostgreSQL .................................................................................................................... 23

6 Teil II der Aufgabenstellung ................................................................................................................. 24

6.1 ERD von Demo-Datenbank „Sakila“ ........................................................................................ 24

6.2 Import Demo-Datenbank „Sakila“ ............................................................................................ 25

6.2.1 MySQL ........................................................................................................................... 25

6.2.2 PostgreSQL .................................................................................................................... 26

6.3 Anpassung der PHP-Files für die Nutzung der „Sakila“ Datenbank ......................................... 28

6.4 Ausspähen von Daten ................................................................................................................ 30

6.4.1 MySQL ........................................................................................................................... 30

6.4.2 PostgreSQL .................................................................................................................... 31

6.5 Veränderung von Daten ............................................................................................................. 33

6.5.1 MySQL ........................................................................................................................... 33

6.5.2 PostgreSQL .................................................................................................................... 35

6.6 Datenbank-Server verändern ..................................................................................................... 35

6.6.1 MySQL ........................................................................................................................... 35

Page 5: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Inhalt

5

6.6.2 PostgreSQL .................................................................................................................... 37

6.7 Änderungen am Filesystem ....................................................................................................... 38

6.7.1 MySQL ........................................................................................................................... 38

6.7.2 PostgreSQL .................................................................................................................... 39

6.8 Einschleusen von beliebigem Code ........................................................................................... 41

6.8.1 MySQL ........................................................................................................................... 41

6.8.2 PostgreSQL .................................................................................................................... 41

6.9 Suche nach Artefakten / forensische Auswertung ..................................................................... 42

6.9.1 Auswertung des MySQL Query-Logfiles „mysql_query.log“ ....................................... 42

6.9.2 PostgreSQL .................................................................................................................... 43

6.9.3 Auswertung der Apache „access.log“ Datei ................................................................... 44

6.9.4 Abschluss ....................................................................................................................... 44

Page 6: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Einleitung und Wahl des Fachbegriffes für das Forensik-Wiki

6

3 Einleitung und Wahl des Fachbegriffes für das Forensik-Wiki

Die Aufgabenstellung verlangt die Wahl und Definition eines Fachbegriffes aus dem

Umfeld der Datenbankforensik für das Forensik-Wiki der Hochschule Wismar.

Meine Wahl fiel auf den Begriff „Error Based SQL Injection“.

3.1 Error Based SQL Injection (fehlerbasierte SQL Injektion)

Den Fachbegriff habe ich im Forensik-Wiki auf folgender Seite definiert:

https://it-forensik.fiw.hs-wismar.de/index.php/Error_Based_SQL_Injection

Quelle: https://skytale.academy/it-sicherheit-wiki.html

Quelle: https://medium.com/@hninja049/example-of-a-error-based-sql-injection-

dce72530271c

Page 7: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Vorbereitungen

7

4 Vorbereitungen

Um die gestellte Aufgabe strukturiert abarbeiten zu können, sind einige Vorbereitungen

vonnöten. Zum einen wird die von Herrn Hense erstellte virtuelle Maschine für Teil I der

Aufgabenstellung benötigt, zum anderen das Buch „SQL-Injektion“ von Justin Clarke,

das als Download in der Cloud der Universität Weimar verfügbar gemacht wurde.

4.1 Download der VM

Der Download der VM hatte einigen Kommilitoninnen und Kommilitonen Probleme

bereitet. Auch ich konnte bei dem Versuch die Datei „thesis.zip“ von dem Laufwerk

„Z:Forensik-DB-VM“ über den VMware-Horizon-Client auf mein System zu

übertragen große Probleme feststellen.

Die Datei hat eine Größe von ca. 19 GB.

Zum einen waren die Übertragungsraten so gering, dass die Übertragung weit mehr als

18 Stunden gedauert hätte (dies lag nicht an zu geringer Bandbreite UP/DOWN auf

meiner Seite), zum anderen brach der Kopiervorgang regelmäßig ab.

Ich habe die Übertragung dann wie folgt gelöst:

1. MD5 Summe des Files „thesis.zip” auf der von der HS Wismar bereitgestellten

VM erstellt. (verwendetes Tool: MobaXterm mit local terminal)

MD5-Summe der Datei: 6eba7c7dc9374f28f8fed9ed6f6f816c

Page 8: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Vorbereitungen

8

2. Den FTP-Client FlashFXP auf der bereitgestellten VM installiert, um bei

Verbindungsaufbruch einen Wiederaufsetzungspunkt zu haben und nicht wieder

alles erneut herunterladen zu müssen.

Die Datei lies sich so innerhalb von 7 Stunden auf meinen FTP-Server übertragen.

3. Nach erfolgreichem Download habe ich die Integrität der Datei auf meinem

System überprüft, d.h. MD5-Summe gebildet:

Die hier gebildete MD5-Summe 6eba7c7dc9374f28f8fed9ed6f6f816c war identisch mit

der vorherig auf dem Quellsystem gebildeten MD5-Summe.

Die Übertragung war also erfolgreich und ich konnte die ZIP-Datei nun entpacken.

Page 9: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Vorbereitungen

9

4.2 Bereitstellung der VM in eigener Umgebung

Das Bereitstellen der virtuellen Maschine in Oracle-VirtualBox ist sehr einfach.

Im Menüband auf „Maschine“ klicken und dann den Punkt „hinzufügen“ auswählen.

Es öffnet sich folgendes Dialogfenster in dem man die entsprechende VBOX-Datei

auswählt und mit einem Klick auf den Button „Öffnen“ auch schon bereitstellt.

Bereitgestellte Maschine:

4.3 Download des Buches

Da ich das Buch „SQL-Injektion“ von Justin Clarke nicht im ZIP-Container finden

konnte, habe ich es von der bereitgestellten Quelle (Cloud Uni Weimar - https://cloud.uni-

weimar.de/index.php/s/JQfxvTqdFItk3ST) heruntergeladen.

Page 10: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

10

5 Teil I der Aufgabenstellung

Nachfolgend soll anhand zweier unterschiedlicher Datenbanksysteme aufgezeigt werden,

dass die SQL-Injektion-Beispiele aus der Bachelor Thesis von Herrn Hense (3.4.1 – 3.4.5)

unter Nutzung der zur Thesis bereitgestellten virtuellen Maschine durchgeführt wurden.

Zur Veranschaulichung habe ich mich für die Datenbanksysteme MySQL und

PostgreSQL entschieden.

5.1 Ausspähen von Daten

5.1.1 MySQL

Schritt 1: Listen der Datenbanken

Schritt 2: Anzeigen der Tabellen

Page 11: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

11

Schritt 3: Anzeige um Spaltennamen erweitern

Schritt 4: Auslesen von Inhalten

5.1.2 PostgreSQL

Schritt 1: Listen der Datenbanken

Page 12: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

12

Schritt 2: Anzeigen der Tabellen

Schritt 3: Anzeige um Spaltennamen erweitern

Schritt 4: Auslesen von Inhalten

Page 13: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

13

5.2 Veränderung von Daten

5.2.1 MySQL

Schritt 1: neue Datenbank und Tabelle anlegen, Daten einfügen und verändern

Schritt 2: Angelegte Inhalte anzeigen

Schema wurde angelegt:

Der oben eingefügte Datensatz mit geupdateter ID von 1 auf 2 existiert:

Page 14: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

14

Schritt 3: Entfernen der angelegten Inhalte

Tabelleninhalt löschen:

Löschen der angelegten Tabelle:

Und abschließend das Löschen der angelegten Datenbank:

Schritt 4: Überprüfen, ob alle Inhalte erfolgreich entfernt wurden

Wie ersichtlich, wird die angelegte Datenbank nicht mehr gelistet und wurde erfolgreich

gelöscht.

Page 15: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

15

5.2.2 PostgreSQL

Schritt 1: neue Datenbank und Tabelle anlegen, Daten einfügen und verändern

Wie Herr Hense in seiner Bachelor Thesis schreibt, ist das Anlegen einer Datenbank via

Multiqueryanweisung in PostgreSQL nicht möglich:

Ich erhielt demnach korrekterweise folgende Fehlermeldung:

Um das Beispiel dennoch – teilweise – durchführen zu können, habe ich die Datenbank

dann direkt angelegt.

Schritt 2: Tabelle anlegen via SQL Injection

Auch dies ist nicht möglich, da keine Cross-Database-References implementiert sind:

Folglich scheitern auch die Punkte „Insert into“ , „Update“ , „Drop Table“ und „Drop

Database“.

Page 16: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

16

5.3 Datenbank-Server verändern

5.3.1 MySQL

Schritt 1: Anlegen eines Nutzers mit allen Rechten via SQL Injection

Schritt 2: Mit angelegtem Nutzer in der Datenbank angemeldet:

Schritt 3: Löschen eines Nutzers per SQL Injection

Page 17: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

17

Schritt 4: Überprüfen, ob User gelöscht:

Login geht nicht mehr – d.h. User erfolgreich per SQL Injection gelöscht.

5.3.2 PostgreSQL

Schritt 1: Anlegen eines Nutzers mit allen Rechten via SQL Injection

Schritt 2: Angelegten User anzeigen via SQL Injection

Schritt 3: Löschen eines Nutzers per SQL Injection

Schritt 4: Überprüfen, ob User gelöscht wurde per SQL Injection

Page 18: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

18

5.4 Änderungen am Filesystem

5.4.1 MySQL

Schritt 1: Lesezugriff auf Systemfiles

Damit das Auslesen bzw. der Zugriff auf das Filesystem im kommenden Beispiel

funktioniert, muss der Parameter „secure_file_priv“ in der „config-file.cnf“ unter

„/var/lib/mysql/config“ auf dem Docker-Container angepasst werden.

Vor der Anpassung:

Nach der Anpassung:

Dann Service neu starten, damit Config-File neu eingelesen wird.

Page 19: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

19

Lesezugriff auf das Filesystem via SQLi:

Schritt 2: Schreibzugriff

Schritt 3: Lesezugriff auf vorherig geschriebenes File

Page 20: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

20

5.4.2 PostgreSQL

Erzeugen einer Tabelle „mydata“ und befüllen per COPY-Befehl mit dem Inhalt der

Systemdatei „/etc/passwd“.

Inhalt der erzeugten Tabelle abfragen:

Löschen der Tabelle „mydata“

Page 21: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

21

Schreibzugriff:

Es wird der PHP-Code „<? pasthru($_GET[cmd]); ?>“ über den Umweg einer

Hilfstabelle „mytable“ in die Datei „/var/lib/postgresql/data/c.php“ geschrieben.

Löschen des erstellten Tables „mytable“ nicht vergessen:

Lesezugriff auf das eben erstellte File „/var/lib/postgresql/data/c.php“:

Die Spalte „t“ wird leer angezeigt, was vermutlich daran liegt, dass der PHP-Code

interpretiert wird. Ich habe über die Konsole den Inhalt der Tabelle überprüft, um sicher

zu sein, dass die Query funktionierte und das tat sie:

Löschen der Tabelle „mydata“:

Page 22: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

22

5.5 Einschleusen von beliebigem Code

5.5.1 MySQL

Wie Herr Hense schreibt, bietet MySQL keine Möglichkeit Systembefehle abzusetzen.

Nachfolgend Realisierung und Nutzung einer Webshell:

Page 23: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil I der Aufgabenstellung

23

Cross Site Scripting zur Codeinjektion auf Clientsystemen:

5.5.2 PostgreSQL

Postgres erlaubt die direkte Ausführung von Systembefehlen, sowie das Schreiben des

Ergebnisses in eine Tabelle:

Page 24: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

24

6 Teil II der Aufgabenstellung

Für Teil II der Aufgabenstellung soll eine weitere Datenbank eingespielt werden. Die

Entscheidung, ob man eine eigene Datenbank erstellt oder eine Demo-Datenbank aus dem

Internet verwendet, wurde einem frei überlassen.

Ich werde für den nachfolgenden Teil II die von MySQL bekannte Datenbank „Sakila“

nutzen. Bei der Demo-Datenbank „Sakila“ handelt es sich um eine Videothek (DVD

Rental Store). Die Demo-Datenbank wurde für viele DBMS portiert und eignet sich

hervorragend für die Erfüllung der weiteren Aufgabe.

6.1 ERD von Demo-Datenbank „Sakila“

Quelle: https://github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/Sakila

Page 25: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

25

6.2 Import Demo-Datenbank „Sakila“

6.2.1 MySQL

Download der SQL-Files „mysql-sakila-schema.sql“ und „mysql-sakila-insert-

data.sql“ von der Webseite https://github.com/jOOQ/jOOQ/tree/master/jOOQ-

examples/Sakila/mysql-sakila-db auf die virtuelle Maschine von Herrn Hense in das

Verzeichnis „/var/www/docker/mysql/config/“ .

Danach im Terminal mit der MySQL-Docker-Instanz verbunden und den Import via

MySQL-Shell durchgeführt:

Überprüfung, ob Import erfolgreich:

Page 26: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

26

Importvorgang war erfolgreich!

6.2.2 PostgreSQL

Analog wie im vorherigen Beispiel, Download der SQL-Files „postgres-sakila-

schema.sql“ und „postgres-sakila-insert-data.sql“ von der Webseite

https://github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/Sakila/postgres-sakila-db

auf die virtuelle Maschine von Herrn Hense in das Verzeichnis

„/var/www/docker/pgdata/“ .

Page 27: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

27

Anschließend via Terminal mit der Postgres-Docker-Instanz verbunden und den Import

via Postgres-Shell durchgeführt:

1. Datenbank angelegt:

2. Import des Files postgres-sakila-schema.sql

3. Import der Tabelleninhalte aus postgres-sakila-insert-data.sql

Überprüfung, ob Import erfolgreich:

Der Importvorgang war erfolgreich!

Page 28: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

28

6.3 Anpassung der PHP-Files für die Nutzung der „Sakila“ Datenbank

Um die nachfolgenden Beispiele durchführen zu können, mussten manche PHP-Files

angepasst werden:

In der Datei „db_vars0.php“ im Verzeichnis „/var/www/html/victim/“ wurde die neue

Datenbank „sakila“ für die MySQL und PostgreSQL Beispiele eingetragen.

Eine weitere Anpassung musste in der Datei „test_sqli_postgres.php“ im selben

Verzeichnis gemacht werden, um eine valide Anfrage zu erhalten – d.h. eine Abfrage auf

einen existierenden Table der „sakila“ Datenbank.

Page 29: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

29

Auch das File „test_sqli_mysql.php“ wurde sinngemäß angepasst:

Page 30: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

30

6.4 Ausspähen von Daten

6.4.1 MySQL

Schritt 1: Listen der Datenbanken

Schritt 2: Anzeigen der Tabellen

Page 31: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

31

Schritt 3: Anzeige um Spaltennamen erweitern

Schritt 4: Auslesen von Inhalten

6.4.2 PostgreSQL

Schritt 1: Listen der Datenbanken

Page 32: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

32

Schritt 2: Anzeigen der Tabellen

Schritt 3: Anzeige um Spaltennamen erweitern

Schritt 4: Auslesen von Inhalten

Page 33: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

33

6.5 Veränderung von Daten

6.5.1 MySQL

Schritt 1: neue Datenbank und Tabelle anlegen, Daten einfügen und verändern

Schritt 2: Angelegte Inhalte anzeigen

Schema wurde angelegt:

Der oben eingefügte Datensatz mit geupdateter ID von 1 auf 2 existiert:

Page 34: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

34

Schritt 3: Entfernen der angelegten Inhalte

Tabelleninhalt löschen:

Löschen der angelegten Tabelle:

Und abschließend das Löschen der angelegten Datenbank:

Schritt 4: Überprüfen, ob alle Inhalte erfolgreich entfernt wurden

Wie ersichtlich, wird die angelegte Datenbank „Claus“ nicht mehr gelistet und wurde

erfolgreich gelöscht.

Page 35: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

35

6.5.2 PostgreSQL

Wie bereits unter 5.2.2 beschrieben, ist eine Durchführung unter PostgreSQL nicht

möglich, da ein CREATE DATABASE Befehl in Multiqueryanweisungen nicht

ausgeführt wird und keine Cross-Database-References implementiert sind.

6.6 Datenbank-Server verändern

6.6.1 MySQL

Anlegen eines Users „claude“ mit dem Passwort „gemein“ via SQL Injection:

Schritt 2: Mit angelegtem Nutzer in der Datenbank angemeldet:

Login erfolgreich mit erstelltem User „claude“.

Page 36: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

36

Schritt 3: Löschen von „claude“ per SQL Injection

Schritt 4: Überprüfen, ob der User erfolgreich gelöscht wurde:

Das Login geht nicht mehr – d.h. User erfolgreich per SQL Injection gelöscht.

Page 37: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

37

6.6.2 PostgreSQL

Schritt 1: Anlegen eines Nutzers mit allen Rechten via SQL Injection

Schritt 2: Angelegten User anzeigen via SQL Injection

Schritt 3: Löschen eines Nutzers per SQL Injection

Schritt 4: Überprüfen, ob User gelöscht wurde per SQL Injection:

Wie ersichtlich, wurde der angelegte User „Claus“ erfolgreich gelöscht.

Page 38: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

38

6.7 Änderungen am Filesystem

6.7.1 MySQL

Hier ändert sich auch bei Nutzung einer eigenen Datenbank nichts.

Damit das Auslesen bzw. der Zugriff auf das Filesystem im kommenden Beispiel

funktioniert, muss der Parameter „secure_file_priv“ in der „config-file.cnf“ unter

„/var/lib/mysql/config“ auf dem Docker-Container angepasst werden. Siehe hierzu

5.4.1.

Schritt 1: Lesezugriff auf das Filesystem via SQLi:

Schritt 2: Schreibzugriff

Schritt 3: Lesezugriff auf vorherig geschriebenes File

Page 39: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

39

6.7.2 PostgreSQL

Erzeugen einer Tabelle „clausdata“ und befüllen per COPY-Befehl mit dem Inhalt der

Systemdatei „/etc/passwd“.

Inhalt der erzeugten Tabelle abfragen:

Löschen der Tabelle „clausdata“:

Page 40: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

40

Schreibzugriff:

Es wird der PHP-Code „<?php $heute_in_einem_monat = strtotime("+1 month");

echo date("d.m.Y", $heute_in_einem_monat)."<br />";?>“ über den Umweg einer

Hilfstabelle „faketable“ in die Datei „/var/lib/postgresql/data/claus.php“ geschrieben.

Löschen des erstellen Tables „faketable“ nicht vergessen:

Lesezugriff auf das eben erstellte File „/var/lib/postgresql/data/claus.php“:

Die Spalte „t“ zeigt nicht ganz das erwartete Ergebnis. Ich habe das geschriebene File

„claus.php“ untersucht und festgestellt, dass es den ganzen PHP-Code beinhaltet.

Löschen der Tabelle „readtable“:

Page 41: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

41

6.8 Einschleusen von beliebigem Code

6.8.1 MySQL

MySQL bietet keine Möglichkeit Systembefehle abzusetzen.

Die Realisierung und Nutzung einer Webshell wurde bereits unter 5.5.1 realisiert und

ändert sich durch die Nutzung einer eigenen Datenbank nicht.

Cross Site Scripting zur Codeinjektion auf Clientsystemen:

6.8.2 PostgreSQL

Postgres erlaubt die direkte Ausführung von Systembefehlen, sowie das Schreiben des

Ergebnisses in eine Tabelle:

Page 42: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

42

6.9 Suche nach Artefakten / forensische Auswertung

Die durch SQL Injection ausgeführten Abfragen / Veränderungen lassen sich in

unterschiedlichen Bereichen auffinden / nachweisen.

6.9.1 Auswertung des MySQL Query-Logfiles „mysql_query.log“

In der „mysql_query.log“ lassen sich alle unter den Punkten 6.4 bis 6.8 ausgeführten

Queries nachweisen.

Abgesetzte SQL-Statements aus 6.4.1:

Abgesetzte SQL-Statements aus 6.5.1:

Abgesetzte SQL-Statements aus 6.6.1:

Abgesetzte SQL-Statements aus 6.7.1:

Abgesetzte SQL-Statements aus 6.8.1:

Page 43: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

43

6.9.2 PostgreSQL

Das Logging muss bei PostgreSQL unter Umständen erst in der Config-Datei

„postgresql.conf“ aktiviert werden. Auf der bereitgestellten VM von Herrn Hense war

in meinem Fall das Logging bereits aktiviert.

Abgesetzte SQL-Statements aus 6.4.2:

Abgesetzte SQL-Statements aus 6.5.2:

Keine Informationen im Log-File vorhanden, da 6.5.2 nicht durchführbar war (siehe

Erklärung bei 6.5.2).

Abgesetzte SQL-Statements aus 6.6.2:

Abgesetzte SQL-Statements aus 6.7.2:

Abgesetzte SQL-Statements aus 6.8.2:

Page 44: Hausarbeit im Modul Datenbanken II: Forensik in DBS ... · „Datenbanken II: Forensik in Datenbankmanagementsystemen“, sowie den Ergänzungen aus den Folien des zweiten Webinars

Teil II der Aufgabenstellung

44

6.9.3 Auswertung der Apache „access.log“ Datei

Auch in der „access.log“ des Apache-Webservers lassen sich Artefakte der SQLi finden:

Exemplarisch:

6.9.4 Abschluss

Sicherlich kann man auch eigene Log-Tabellen und dementsprechende Trigger

einrichten, um über unerlaubte Manipulationsversuche informiert zu werden.

Meines Erachtens fehlt uns Studenten für eine vollständige und korrekte forensische

Auswertung (Auffinden aller Artefakte) noch ein gewisses Maß an Routine und

Fachwissen.