защита от выполнения стека и рандомизация в Ubuntu - PullRequest
5 голосов
/ 09 февраля 2009

Как часть задания курса, мне нужно написать код эксплойта, чтобы вызвать переполнение буфера и выполнить код, который присутствует в стеке.

Я отключил рандомизацию стека с помощью следующей команды: sysctl -w kernel.randomize_va_space = 0 Тем не менее, я не могу найти способ отключить защиту от выполнения стека. Я не уверен, есть ли какая-то защита exec в стеке в ubuntu или нет ... поэтому мой первый вопрос: есть ли что-то вроде exec-shield от red hat в ubuntu 8.10 и, если есть, как мы можем его отключить? *

Я пытался вызвать переполнение буфера и выполнить инструкцию из стека, но всякий раз, когда я пытаюсь это сделать, это вызывает ошибку seg.

Я получил Ubuntu 8.10 64 бит, ОДНАКО программа отладки скомпилирована на машине i386 с отключенной защитой стека.

Ответы [ 2 ]

5 голосов
/ 04 февраля 2010

Возможно, вы захотите скомпилировать с флагом -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 - это просто рандомизация адресного пространства, а не защита стека как таковая; которые могут быть грубо вынуждены против использования различных методов.

0 голосов
/ 16 апреля 2013

Эти программы часто можно использовать без исполняемых стеков. Если жертва компилируется без исполняемого стека, рассмотрите возвратно-ориентированное программирование как метод эксплойта.

http://en.wikipedia.org/wiki/Return-oriented_programming

...