У меня сейчас почти такая же проблема с Ubuntu 9.10 в виртуальной машине.
Отключены все измерения безопасности ОС, и простые эксплойты, такие как «выйти из программы и установить код выхода на 42», работают, но при попытке открыть оболочку программа просто завершается.
Вывод GDB идентичен:
(gdb) run < exploit.0xbffff3b8
Starting program: /home/seminar/ubung/target/client < exploit.0xbffff3b8
Enter password: Sorry. Wrong password.
Executing new program: /bin/bash
Program exited normally.
(gdb)
Дело в том, что мне нужно, чтобы он работал прибл. 16 часов для презентации: -D
Обновление:
Я нашел это аккуратное исследование: www.shell-storm.org/papers/files/539.pdf
На странице 16 написано:
«Если мы попытаемся выполнить оболочку, она немедленно прекратит работу в этой конфигурации»
В других примерах, которые не используют get (), они очень хорошо порождают оболочку. К сожалению, они не дают намека на то, ПОЧЕМУ это не работает таким образом. (
Следующее обновление:
Кажется, это связано со стандартным вводом данных. Оболочка не может правильно использовать ту, которую она получает от исходного процесса. Я попытался использовать минимальную оболочку, для которой я нашел исходный код (evilsh). Он упал в точке, где он пытался прочитать ввод. Я предполагаю, что bash / dash проверяет это и просто молча завершает работу, когда что-то не так с stdin.
Хорошо, пожалуйста, не убивайте меня за этот разговор с самим собой, но ...
Я нашел решение!
По какой-то причине необходимо повторно открыть входы. Я нашел рабочий шелл-код здесь:
http://www.milw0rm.com/shellcode/2040
Я не вижу жестких подсказок, но я могу запускать программы и т. Д. С помощью открывающейся оболочки.