Подготовка стека для нового процесса - Bash / System () Различия вызовов

StackOverflow https://stackoverflow.com/questions/19847495

Вопрос

У меня есть приложение, которое объясняет переполнение буфера стека. Я хотел бы спровоцировать атаку возврата к LIBC.

Переполнение буфера основано на:

int main(int argc, char **argv)
{
[...]
char buff[16];
strcpy(buff,argv[1]);
[...]
}

Когда я называю это приложение прямо из Shell, я получаю ожидаемую ошибку - стек поврежден:

[syssec@syssecvm bufov1]$ ./vulnapp hhgfhdsgfsagfzutuewzrqwgfshgafsd
Segmentation fault

Но когда я пытаюсь подготовить аргумент в другом приложении (executor.c) и позвонить в Vulnapp через звонок System (), ничего не происходит. vulnapp принимает аргумент о любом листе:

./executor
You executed:./vulnapp 01234567890123450123BBBB�%�/bin/ged�������/
[syssec@syssecvm bufov1]$ 

В этом случае нет коррупции стека.

Почему это так?

Есть ли способ получить тот же эффект (переполнение буфера) в случае вызова System ()?

Это было полезно?

Решение

Есть коррупция стека. Function System () выходит с кодом ошибки, вероятно, 139. Ваше приложение не заметило это, потому что это другой процесс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top