Упражнение о переполнении стека - PullRequest
2 голосов
/ 01 мая 2011

Я пытаюсь изучить переполнение стека, но у меня проблема с упражнением. В уязвимой программе часть кода, которая должна получить мой шелл-код:

 int array[8];
 index = (int) strtol(argv[1], NULL, 10);
 value = (int) strtoul(argv[2], NULL, 16);
 array[index] = value;

Я легко нашел индекс массива, который можно использовать для перезаписи RET. Затем я попытался найти смещение адреса возврата в уязвимой программе следующим образом:

./victim 12 $(printf "%0512x" 0)

Я пробовал много разных длин, но на каждой возможной длине я получаю ошибку сегментации. Это странно, потому что моя книга говорит, что я смогу получить ошибку сегментации только там, где сохранен обратный адрес. Я новичок, поэтому, вероятно, я делаю основную ошибку. Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо за любую помощь.

1 Ответ

1 голос
/ 01 мая 2011

Вы получаете ошибку сегментации, потому что вы предоставляете своей программе только один аргумент, но при этом вы вызываете strtoul для argv[2], который является NULL указателем.

...