Ich möchte einige Shell-Codes ausprobieren und den Linux-Schutz deaktivieren.
Ich weiß, dass ich mit Flags kompilieren kann, aber ich weiß, dass es eine andere Möglichkeit gibt, diese Schutzfunktionen im Allgemeinen zu deaktivieren, an die ich mich einfach nicht erinnern kann. Können Sie mir helfen?
Um das zu erweitern, was vonbrand (richtig, +1) gesagt hat, besteht der Stack-Schutz von Linux aus zwei Teilen.
Kanarienvögel stapeln
Stapelkanarien sind die vom Compiler erzwungene Funktion, auf die sich vonbrand bezieht. Diese können ohne Neukompilierung nicht deaktiviert werden.
Um sich selbst zu beweisen und zu sehen, wie sie funktionieren, verwenden Sie den folgenden Code:
Kompilieren Sie nun das (
gcc -fstack-protector -masm=intel -S test.c
) zu etwas Gnu, das gerne die Ausgabe zusammenstellen und lesen würde. Der wichtige Punkt ist, dass es beim Verlassen dermybadfunction
Funktion diesen kleinen Code gibt:Wie Sie sich vorstellen können, wird ein Stapel-Cookie daraus entnommen
[ebp-12]
und mit dem Wert bei verglichengs:20
. Passt nicht zusammen? Es ruft dann eine Funktion__stack_chk_fail
in glibc auf, die Ihr Programm genau dort beendet.Es gibt Möglichkeiten, dies beim Schreiben von Exploits zu umgehen, aber die einfache Möglichkeit beim Erstellen eines Shellcode-Testfalls besteht darin, Ihr Programm mit zu kompilieren
-fno-stack-protector
.Nicht ausführbare Seiten
Es gibt einige andere Überlegungen zu modernen Linux-Systemen. Wenn Sie den üblichen Shellcode-Teststub verwenden:
Modernes GCC / Linux ordnet den
.rodata
Abschnitt der PE-Datei schreibgeschützt ohne Ausführungsberechtigungen zu. Sie müssen dies deaktivieren . Dies kann mithilfe des Codebeispiels aus diesem Blog-Beitrag erfolgen . Grundidee: Mit dieser Optionmprotect
fügen Sie den Seiten, auf denen sich die Shellcode-Daten befinden, die gewünschten Berechtigungen hinzu.Nicht ausführbare Stapel
Wenn Sie ein traditionelles Exploit-Szenario, z. B. meinen fehlerhaften Code oben, mit Ihrem Shellcode testen möchten, müssen Sie auch sicherstellen, dass der Stack für die einfachen Fälle ausführbar ist. Das PE-Dateiformat enthält ein Feld zum Bestimmen, ob der Stapel ausführbar ist. Sie können dies mit execstack abfragen und steuern . Führen Sie aus, um einen ausführbaren Stapel zu aktivieren
Dies kann mit beliebigen Programmen durchgeführt werden, ohne dass eine Neukompilierung erforderlich ist, deaktiviert jedoch nicht automatisch Stapelkanarien, da diese beim Kompilieren eingebrannt werden.
Zusätzlicher Bonus: aslr:
Um das auszuschalten ,
echo 0 > /proc/sys/kernel/randomize_va_space
.Hast du gerade jemandem gesagt, wie er meinen kostbaren Pinguin ausbeuten kann?
Nein. Jeder Exploit muss Stapelkanarien umgehen (sehr wenig trivial) und entweder ein Programm mit
execstack
set finden oder setzen (was bedeutet, dass er ohnehin schon beliebige Befehle ausführen kann) oder schwierigere Techniken verwenden, wie z. B. Rückkehr zu libc / return orientierte Programmierung.quelle
Mit diesen Optionen können Sie einige Schutzfunktionen deaktivieren (Erkennung von Stapelzerstörungen und Ausführung des Stapels).
Sie können ASLR (Adressraum-Layout-Randomisierung) auch mit Bash mit dem folgenden Befehl deaktivieren:
quelle