Как часть присвоения курса я должен записать эксплоитный код, чтобы вызвать переполнение буфера и выполнить код, который присутствует на стеке.
Я выключил стек randomiztion следующей командой: sysctl-w ядро randomize_va_space=0 Однако я не могу найти способ выключить защиту выполнения стека. Я не уверен, существует ли некоторая исполнительная защита стека в человечности или не..., таким образом, мой первый вопрос состоит в том, похож ли там на что-то исполнительный щит красной шляпы в человечности 8.10 и если существует, как мы можем выключить его.
Я пытался вызвать переполнение буфера и выполнить инструкцию от стека, но каждый раз, когда я пытаюсь сделать так, это дает мне отказ seg.
У меня есть человечность 8.10 64 бита, ОДНАКО программа, которую я отлаживаю, компилируется на i386 машине с выключенной защитой стека.
Вероятно, вы захотите выполнить компиляцию с флагом -z execstack
в вашей компиляции GCC вместе с -fno-stack- protector
(чтобы отключить защиту стека SSP / Propolice GCC), то есть:
gcc -fno-stack-protector -z execstack -o vuln vuln.c
После этого, вероятно, все должно измениться. Обратите внимание, что sysctl -w kernel.randomize_va_space = 0
- это просто рандомизация адресного пространства, а не защита стека как таковая; который может быть подвергнут грубому принуждению с использованием различных техник.