In diesem Artikel erinnern wir uns an die Syntax des ARM-Assemblers, behandeln die Shellshock-Sicherheitsanfälligkeit und lösen auch die 8. und 10. Aufgabe von der Site
pwnable.kr .
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.
Leg Quest Lösung
Wir klicken auf das erste Symbol mit dem Signaturabschnitt und es wird uns mitgeteilt, dass wir uns über SSH mit dem Passwort Gast verbinden müssen. Sie bieten auch Quellcode in C und Assembler.

Laden Sie beide Dateien herunter und sortieren Sie den Quellcode in C. Nach Assemblersprache können wir sagen, dass die ARM-Syntax verwendet wird. Über ARM Assembler auf Habré schrieb
hier und
hier .

In der Funktion main () wird vom Benutzer eine Nummer empfangen und mit der Summe der Ergebnisse der drei Funktionen key () verglichen. Sortieren wir sie der Reihe nach.

Somit wird der Wert aus dem PC-Register in das Register R3 gestellt. Im ARM-Assembler enthält das PC-Register die Adresse des nächsten auszuführenden Befehls. Wir sehen uns den zerlegten Code an.

Somit gibt die Funktion key1 () den Wert 0x8ce4 zurück. Lassen Sie uns die Funktion key2 () analysieren.

0x8d08 wird in R3 platziert, das dann um 4 erhöht und in das Register R0 geschrieben wird. Das heißt, key2 () gibt 0x8d0c zurück. Betrachten Sie key3 ().

In Analogie zur ersten Funktion schließen wir, dass key3 () einen Wert aus dem LR-Register zurückgibt. LR enthält die Rücksprungadresse der Funktion. Mal sehen, wo die Funktion aufgerufen wird und die folgende Adresse nehmen.

Die Funktion key3 () gibt 0x8d80 zurück. Stellen Sie eine Verbindung über SSH her und geben Sie die Summe der drei im Programm gefundenen Zahlen ein.


Wir übergeben die Flagge und bekommen zwei Punkte.

Shellshock aka Bashdoor
Shellshock (Bashdoor) ist eine im GNU Bash-Programm entdeckte Software-Sicherheitsanfälligkeit, mit der beliebige Befehle ausgeführt werden können, wenn einige nicht standardmäßige Werte von Umgebungsvariablen empfangen werden. Die Sicherheitsanfälligkeit hat die Nummer CVE-2014-6271 erhalten.
Unter Unix-ähnlichen Betriebssystemen verfügt jedes Programm über Umgebungsvariablen. Der untergeordnete Prozess erbt vom übergeordneten Prozess eine Liste von Umgebungsvariablen. Zusätzlich zu Umgebungsvariablen verwaltet bash auch eine interne Liste von Funktionen - benannte Skripte, die von einem ausführbaren Skript aufgerufen werden können. Beim Ausführen von Skripten aus anderen (übergeordneten) Skripten können die Werte vorhandener Umgebungsvariablen und Funktionsdefinitionen exportiert werden. Funktionsdefinitionen werden exportiert, indem sie in Form neuer Umgebungsvariablen eines speziellen Formats codiert werden, beginnend mit leeren Klammern „()“, gefolgt von der Definition der Funktion als Zeichenfolge. Neue Bash-Instanzen scannen zu Beginn alle Umgebungsvariablen, erkennen dieses Format und konvertieren es zurück in die Definition einer internen Funktion. Wenn ein Angreifer die Möglichkeit hat, eine beliebige Umgebungsvariable zum Ausführen von Bash zu senden, wird die Möglichkeit angezeigt, beliebige Befehle auszuführen.
Im folgenden Beispiel wird der Text VULN gedruckt.
env x='() { : ; }; echo “VULN”' bash -c “echo text”
Da bei der Ausführung des Befehls "Echo Text" die in der Umgebungsvariablen x enthaltene Funktionsdefinition geladen wird und der Befehl "Echo" VULN "damit ausgeführt wird.
Shellshock-Joblösung
Wir klicken auf das erste Symbol mit dem Signatur-Shellshock und erfahren, dass wir uns über SSH mit dem Passwort-Gast verbinden müssen.

Wenn verbunden, sehen wir das entsprechende Banner.

Lassen Sie uns herausfinden, welche Dateien sich auf dem Server befinden und welche Rechte wir haben.

Lassen Sie uns das Ergebnis des Codes sehen.

Interessant ist die Leitung, die die Systemfunktion aufruft. Basierend auf dem Namen nehmen wir an, dass bash, das sich neben dem Programm befindet und vom Programm aufgerufen wird, anfällig ist. In Analogie zu dem im Artikel beschriebenen Angriff führen wir den Befehl zum Lesen des Flags aus.
/bin/cat flag
Dazu definieren wir eine Funktion in der Umgebungsvariablen, in der wir diesen Befehl platzieren. Und dann das Programm ausführen.
export x="() { :; }; /bin/cat flag;"

Wir übergeben die Flagge und bekommen noch einen Punkt. Wir sehen uns im nächsten Artikel.
Wir befinden uns in einem Telegrammkanal: einem
Kanal im Telegramm .