私は、「2011 年にスタックを破壊する」と並んで、古典的な論文「スタックを破壊して利益を得る」を追っています。これらの論文に関するすべての Q/A にもかかわらず、私の問題に対する答えが見つかりません。
私は単純な exit(0) コマンドを実行しようとしていますが、「Smashing The Stack For Fun And Profit」の shellcodeasm.c に似た呼び出しと jmp を使用して、紙を最後までたどることができます (これを機能させることができました)。呼び出しと jmp を削除したとき)。明らかに、次の shellcodeasm.c はシェルを開きませんが、「楽しさと利益のためにスタックを破壊する」の名前を守っているので、私のプロセスは簡単に理解できます。
shellcodeasm.c
void main() {
__asm__("jmp 0xd \n \
popl %esi \n \
movl $0x1,%eax \n \
movl $0x0, %ebx \n \
int $0x80 \n \
call -0x12 \n \
.string \"/bin/sh\" ");
}
gdb を実行gcc -o shellcodeasm -g -ggdb shellcodeasm.c
して使用し、main+3 から main の最後までの 16 進数を取得します (論文のように)。testsc.c を生成できます。
testsc.c
char shellcode[] =
"\xe9\x29\x7c\xfb\xf7\x5e\xb8\x01\x00\x00\x00\xbb\x00"
"\x00\x00\x00\xcd\x80\xe8\xf8\x7b\xfb\xf7\x2f\x62\x69"
"\x6e\x2f\x73\x68\x00\x5d\xc3";
void main() {
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
}
その後、「Smashing the Stack in 2011」のテクニックを使用してコンパイルおよび実行できます。
gcc -o testsc testsc.c -fno-stack-protector
execstack -s testsc
./testsc
しかし残念ながら、セグメンテーション違反が発生します (ここにはバッファ オーバーフローがないため、 -fno-stack-protector は必要ないと思いますが、削除しても機能しません)。
私が理解していない/欠けていることを誰かが知っていますか?
isの出力とuname -a
isLinux core 3.2.0-4-686-pae #1 SMP Debian 3.2.73-2+deb7u3 i686 GNU/Linux
の出力gcc -v
ですgcc version 4.7.2 (Debian 4.7.2-5)
。関連するすべての情報を提供できたことを願っています。