Получил segfault с программой для проверки шелл-кода - PullRequest
1 голос
/ 23 марта 2020

Я нашел этот C пример кода для запуска шелл-кода, но это вызывает ошибку сегментации для меня. Это не вызывает ошибку сегментации на машине моего друга, поэтому мне интересно, если это проблема версии. char вызывает ошибку сегментации?

#include<stdio.h>
#include<string.h>

unsigned char code[] = \
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";

main()
{

  printf("Shellcode Length:  %d\n", strlen(code));

    int (*ret)() = (int(*)())code;

    ret();

}

1 Ответ

0 голосов
/ 23 марта 2020

Чтобы ваш шелл-код работал правильно, вам нужно скомпилировать вашу программу с флагом -z execstack. Это отключает защиту NX , которая включена по умолчанию, и предотвращает пометку страниц, содержащих данные, как исполняемые. Если вы не отключите NX, программа выйдет из строя, потому что страница памяти, куда будет помещена ваша строка шелл-кода, не будет исполняемой, и процесс будет уничтожен при попытке выполнить его содержимое.

Я также вижу int 0x80 в вашем шелл-коде, поэтому я предполагаю, что это должен быть 32-битный шелл-код x86. Кроме этого вы пропускаете int перед main(), но я думаю, что это ошибка копирования-вставки.

Скомпилируйте вашу программу с:

gcc -m32 -z execstack prog.c
...