Я изучаю эксплойты переполнения буфера в двоичных файлах Linux x86. Я выполняю классическое разрушение стека, чтобы создать корневую оболочку в виртуальной машине Ubuntu 12.04, отключив ASLR и скомпилировав двоичный файл, отключив бит NX и стековые канарии.
Во время моего выполнения адрес возврата перезаписывается и выполняется шелл-код, но я не получаю корневую оболочку, вместо этого это приводит к оболочке bash.
Чтобы смягчить защиту bash, я использую оболочку zsh, удалил символическую ссылку sh->bash и создал символическую ссылку sh с оболочкой zsh в каталоге /bin.
Я пробовал с двоичным файлом с поддержкой setuid, принадлежащим root (разрешение на выполнение для другого пользователя), но все же я не получаю корневую оболочку.
Я проверил свой код оболочки с помощью программы C, а также скомпилировал тестовую программу (моего кода оболочки) и выполнил ее после включения setuid. поэтому тестовая программа дает корневую оболочку. Но я не могу получить корневую оболочку, когда тот же шеллкод используется с переполнением буфера.
Когда я отлаживаю этот сценарий в gdb, во время переполнения /bin/zsh4 запускается, но приводит к оболочке bash.
Даже я не могу получить корневую оболочку с возвратом к атаке libc. Это также приводит к оболочке bash. Я пробовал эти шаги в Ubuntu 12.04, Ubuntu 11.04 и Ubuntu9, но результат тот же.
Я новичок в этой области. Таким образом, могут быть некоторые ошибки, которые я сделал на любом из вышеперечисленных шагов. Так может ли кто-нибудь из вас посоветовать, что может быть возможной проблемой и как ее решить
root
? - person merlin2011   schedule 31.03.2014setuid
. Мой вопрос: когда вы запускаете двоичный файл, является ли оболочка, из которой вы запускаете двоичный файл, корневой оболочкой? - person merlin2011   schedule 01.04.2014