Хочу заставить работать пример из книги "Искусство взлома и защиты систем", он для linux и там все работает. В freebsd shellcode нормально получает управление, но там: label1: jmp label3 label2: pop esi .... ; здесь вызов execv для запуска шелла, но до него дело не доходит .... label3: call label2 : и при попытке этого вызова, программа получает SIGSYS (Nonexistant system call) Атрибуты секции .data меняю руками на выполняемые. Код (Text): /* * * shell.c * */ char shellcode[] = "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46" \ "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1" \ "\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"; int main() { int *ret; ret = (int*) &ret + 2; (*ret) = (int)shellcode; //return 0; }
mprotect(,,PROT_EXEC | PROT_READ и наличие Linuxolatorа (COMPAT_LINUX, поддерживаемые ioctl src/sys/compat/linux/ найдётся здесь) для выполнения линуховых вызовов
dag У меня не выполняется конструкция, которая расположена в секции данных вида: Код (Text): jmp label2 label1: nop nop nop label2: call label1 При call label1 отладчик пишет, что программа получила SIGSYS и должна завершиться. В документации это сообщение описано как общая ошибка, ничего конкретного не означающая. Если запустить не в отладчике, зацикливания не происходит, тихо падает да и все. Атрибуты секции .data стоят в executable. А jmp выполняется.