0

私は、「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 -aisLinux 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)。関連するすべての情報を提供できたことを願っています。

4

0 に答える 0