Переполнение буфера - программа завершает работу после запуска оболочки

Я экспериментировал с переполнением буфера в системе FreeBSD. В качестве первого эксперимента я попытался заставить эксплуатируемую программу запустить другой процесс (в данном случае /bin/hostname). Все работало нормально, программа напечатала имя хоста, а затем завершилась. После этого я попытался заставить программу создать оболочку (т.е. выполнить /bin/sh). Я предположил, что это можно сделать, просто заменив строку, представляющую вызываемую программу. Когда я пытаюсь это сделать, эксплуатируемая программа просто завершает работу, согласно gdb, она успешно порождает новый процесс (/bin/sh). Однако оболочка не создается. Затем я попробовал свой первый эксплойт и переместил файл /bin/sh в /bin/hostname, но все равно ничего не меняет. Теперь мой вопрос: чем отличается выполнение /bin/sh от любой другой команды?

Для справки, для попытки создания оболочки я использовал следующий шелл-код:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x54\x53\xb0\x3b\x50\xcd\x80";
6
задан user1419086 26 May 2012 в 14:27
поделиться