SQL-Injection-Schwachstellen in Nmap ausnutzen

Beginner

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie sich mit SQL-Injection vertraut machen, einer Technik, die Angreifer nutzen, um Schwachstellen in Webanwendungen auszunutzen, die mit Datenbanken interagieren. SQL-Injection-Angriffe können unbefugten Zugang zu sensiblen Daten ermöglichen, Datenmanipulationen verursachen und sogar zu einem vollständigen Systemkompromiss führen.

Das Ziel dieses Labs besteht darin, praktische Erfahrungen mit SQL-Injection zu sammeln, indem Sie Schwachstellen in einer anfälligen Webanwendung ausnutzen. Sie werden lernen, wie Sie potenzielle SQL-Injection-Schwachstellen identifizieren, bösartige SQL-Abfragen erstellen und sensible Informationen aus der Datenbank extrahieren können. Darüber hinaus werden Sie über Verteidigungsmechanismen und bewährte Verfahren zur Eindämmung von SQL-Injection-Angriffen erfahren.


Skills Graph

Einrichten der Lab-Umgebung

In diesem Schritt werden Sie die Lab-Umgebung einrichten, die eine anfällige Webanwendung und einen Datenbankserver umfasst.

  1. Öffnen Sie das Terminal und navigieren Sie in das Verzeichnis /home/labex/project.

    cd /home/labex/project
  2. Im project-Verzeichnis befinden sich zwei Python-Dateien: app.py und setup_db.py. Die Datei app.py enthält den Quellcode für die anfällige Webanwendung, und die Datei setup_db.py enthält den Code zur Einrichtung der Datenbank.

  3. Führen Sie das Skript setup_db.py aus, um die Datenbank zu erstellen und sie mit Beispieldaten zu füllen.

    python3 setup_db.py
  4. Starten Sie den Webanwendungsserver.

    python3 app.py

Sie sollten eine Meldung sehen, die angibt, dass der Server auf http://localhost:5000 läuft.

Identifizierung von SQL-Injection-Schwachstellen

In diesem Schritt werden Sie lernen, wie Sie potenzielle SQL-Injection-Schwachstellen in der Webanwendung identifizieren können.

  1. Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:5000.
    Webanwendungs-Homepage
  2. Suchen Sie nach Eingabefeldern, in denen Benutzerdaten an den Server gesendet werden, wie z. B. Suchfeldern.
  3. Versuchen Sie, Sonderzeichen oder SQL-Schlüsselwörter (z. B. ', ", --, ;) in die Eingabefelder einzugeben und beobachten Sie das Verhalten der Anwendung.
  4. Wenn die Anwendung Fehlermeldungen anzeigt oder sich unerwartet verhält, kann dies auf eine potenzielle SQL-Injection-Schwachstelle hinweisen.
    Test der Eingabe im Suchfeld
    Wenn Sie in das Suchfeld ein einfaches Anführungszeichen (') eingeben und auf die Schaltfläche "Suchen" klicken, zeigt die Anwendung einfach Keine Ergebnisse gefunden ohne Fehlermeldung an. Dieses Verhalten deutet darauf hin, dass die Anwendung möglicherweise anfällig für SQL-Injection ist.

Ausnutzung von SQL-Injection-Schwachstellen

In diesem Schritt werden Sie lernen, wie Sie die identifizierten SQL-Injection-Schwachstellen ausnutzen können, um sensible Informationen aus der Datenbank zu extrahieren.

  1. Finden Sie das anfällige Eingabefeld oder den anfälligen Parameter, der im vorherigen Schritt identifiziert wurde.

  2. Versuchen Sie, verschiedene SQL-Injection-Payloads in das Eingabefeld oder den Parameter einzufügen.

  3. Versuchen Sie, sensible Informationen aus der Datenbank mithilfe von SQL-Injection-Payloads zu extrahieren. Beispielsweise können Sie den folgenden Payload verwenden, um Daten aus der Datenbank zu extrahieren:

    ' UNION SELECT username, password FROM users --

    Der obige Payload kann verwendet werden, um die Benutzernamen und Passwörter aus der Tabelle users in der Datenbank abzurufen.

  4. Beobachten Sie die Antwort der Anwendung und suchen Sie nach angezeigten sensiblen Informationen oder Fehlern, die möglicherweise Informationen über die Datenbankstruktur oder -inhalte preisgeben.

Eindämmung von SQL-Injection-Schwachstellen

In diesem Schritt werden Sie über Verteidigungsmechanismen und bewährte Verfahren zur Eindämmung von SQL-Injection-Schwachstellen erfahren.

  1. Prüfen Sie den Quellcode der anfälligen Webanwendung und identifizieren Sie die Bereiche, in denen Benutzerinput in Datenbankabfragen ohne angemessene Reinigung verwendet wird.

  2. Implementieren Sie Techniken zur Eingabevalidierung und -reinigung, wie z. B.:

    • Parametrisierte Abfragen oder vorbereitete Anweisungen (prepared statements)
    • Eingabevalidierung und -reinigung (z. B. Entfernen oder Escaping von Sonderzeichen)
    • Prinzip des geringsten Privilegs für Datenbankkonten
  3. Aktualisieren Sie den Code der Anwendung, um parametrisierte Abfragen oder vorbereitete Anweisungen zu verwenden, wenn Sie Datenbankabfragen mit Benutzerinput ausführen.
    Ändern Sie die Datei app.py von:

    sql_query = "SELECT username, password FROM users WHERE username LIKE '%{}%' OR '{}'".format(query, query)
    cur.execute(sql_query)

    in:

    sql_query = "SELECT username, password FROM users WHERE username LIKE?"
    cur.execute(sql_query, ('%' + query + '%',))

    Und verschieben Sie results = cur.fetchall() unter die Zeile logging.info(f"Search query: {query}").

    logging.info(f"Search query: {query}")
    
    results = cur.fetchall()
  4. Speichern Sie die Datei nach den obigen Änderungen und starten Sie den Webanwendungsserver neu.

    Verwenden Sie ctrl+c, um den Server zu stoppen, und starten Sie ihn dann erneut mit:

    python3 app.py
  5. Testen Sie die aktualisierte Anwendung, um sicherzustellen, dass SQL-Injection-Angriffe nicht mehr möglich sind.

Zusammenfassung

In diesem Lab haben Sie sich mit SQL-Injection vertraut gemacht, einer Technik, die Angreifer nutzen, um Schwachstellen in Webanwendungen auszunutzen, die mit Datenbanken interagieren. Sie haben eine anfällige Webanwendung und einen Datenbankserver eingerichtet, potenzielle SQL-Injection-Schwachstellen identifiziert und diese ausgenutzt, um sensible Informationen aus der Datenbank zu extrahieren. Darüber hinaus haben Sie über Verteidigungsmechanismen und bewährte Verfahren zur Eindämmung von SQL-Injection-Angriffen gelernt, wie z. B. Eingabevalidierung, -reinigung und die Verwendung von parametrisierten Abfragen oder vorbereiteten Anweisungen (prepared statements).

Durch diese praktische Erfahrung haben Sie ein tieferes Verständnis von SQL-Injection-Angriffen und wie man sie in Webanwendungen verhindern kann gewonnen. Sie haben auch gelernt, wie wichtig sichere Codierungspraktiken sind und welche potenziellen Folgen es haben kann, wenn Benutzerinput bei der Interaktion mit Datenbanken nicht richtig gereinigt wird.