Die Joblösung mit pwnable.kr 08 ist leg und 10 ist shellshock. ARM-Assembler. Bash-Schwachstelle

Bild

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 .

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.

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.

Bild

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 .

Bild

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.

Bild

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.

Bild

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

Bild

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 ().

Bild

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.

Bild

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.

Bild

Bild

Wir übergeben die Flagge und bekommen zwei Punkte.

Bild

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.

Bild

Wenn verbunden, sehen wir das entsprechende Banner.

Bild

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

Bild

Lassen Sie uns das Ergebnis des Codes sehen.

Bild

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;" 

Bild

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 .

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


All Articles