Das ist ein gutes Problem. Um dieses Problem zu lösen, müssen Sie auch ASLR deaktivieren, da sonst die Adresse von g () nicht vorhersehbar ist.
ASLR deaktivieren:
sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'
Kanarienvögel deaktivieren:
gcc overflow.c -o overflow -fno-stack-protector
Nachdem Kanarienvögel und ASLR deaktiviert wurden, sollte es sich um einen direkten Angriff handeln, wie er in Smashing the Stack for Fun and Profit beschrieben ist
Hier ist eine Liste der in Ubuntu verwendeten Sicherheitsfunktionen: https://wiki.ubuntu.com/Security/Features Sie müssen sich keine Gedanken über NX-Bits machen, die Adresse von g () befindet sich immer in einem ausführbaren Speicherbereich weil es innerhalb des TEXT-Speichersegments liegt. NX-Bits kommen nur ins Spiel, wenn Sie versuchen, Shellcode auf dem Stapel oder Heap auszuführen, der für diese Zuweisung nicht erforderlich ist.
Jetzt geh und mach das EIP kaputt !
Urm, alle Antworten waren bisher falsch, da Rooks Antwort richtig war.
Eingabe:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Gefolgt von:
gcc -fno-stack-protector -z execstack -o bug bug.c
Das Deaktivieren von ASLR, SSP / Propolice und Ubuntus NoneXec (das in 9.10 platziert wurde und relativ einfach zu umgehen ist, siehe die mprotect (2) -Technik zum Zuordnen von Seiten als ausführbar und jmp) sollte ein wenig helfen, jedoch sind diese "Sicherheitsfunktionen" von nein unfehlbar. Ohne das Flag "-z execstack" haben Seiten nicht ausführbare Stapelmarkierungen.
quelle
In neueren Distributionen (Stand 2016) scheint PIE standardmäßig aktiviert zu sein, sodass Sie es beim Kompilieren explizit deaktivieren müssen.
Hier ist eine kleine Zusammenfassung der Befehle, die beim lokalen Spielen mit Pufferüberlaufübungen im Allgemeinen hilfreich sein können:
Kanarienvogel deaktivieren:
gcc vuln.c -o vuln_disable_canary -fno-stack-protector
DEP deaktivieren:
PIE deaktivieren:
Deaktivieren Sie alle oben aufgeführten Schutzmechanismen (Warnung: nur für lokale Tests):
gcc vuln.c -o vuln_disable_all -fno-stack-protector -z execstack -no-pie
Bei 32-Bit-Computern müssen Sie den
-m32
Parameter ebenfalls hinzufügen .quelle
Sie müssen ASLR nicht deaktivieren, um einen Pufferüberlauf durchzuführen! Obwohl ASLR aktiviert ist (
kernel_randomize_va_space = 2
), wird es nur wirksam, wenn die kompilierte ausführbare Datei PIE ist. Wenn Sie Ihre Datei nicht mit-fPIC -pie
flag kompiliert haben , wird ASLR nicht wirksam.Ich denke nur die Kanarienvögel mit zu deaktivieren
-fno-stack-protector
ist genug. Wenn Sie überprüfen möchten, ob ASLR funktioniert oder nicht (Positionsunabhängiger Code muss festgelegt sein), verwenden Sie:quelle
Versuchen Sie die
-fno-stack-protector
Flagge.quelle
Ich werde nicht die gesamte Seite zitieren, aber das gesamte Handbuch zur Optimierung finden Sie hier: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#Optimize-Options
Von den Klängen wollen Sie zumindest
-O0
die Standardeinstellung und:quelle