-
[HackerSchool] Level16오래된/HackerSchool 2011. 5. 10. 04:44
[level16@ftz level16]$ cat hint
#include <stdio.h>
void shell() {
setreuid(3097,3097);
system("/bin/sh");
}
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
call();
}[ level16 hint ]
이 문제 역시 Buffer Overflow 문제로서 함수 포인터가 가르키는 주소공간을 shell 로 변경하여 문제를 해결 할 수 있다.
[level16@ftz tmp]$ cp ../attackme .
[level16@ftz tmp]$ gdb ./attackme
(gdb) print shell
$1 = {<text variable, no debug info>} 0x80484d0 <shell>[ shell 함수 위치 확인 ]
여러번 gdb 를 통해 shell 의 위치를 확인하여 해당 하는 주소로 가득 채워 넣으면 함수 포인터가 가리키는 주소를 shell 함수 주소로 변경할 수 있을 것이다.'오래된 > HackerSchool' 카테고리의 다른 글
[HackerSchool] Level18 (0) 2011.05.10 [HackerSchool] Level17 (0) 2011.05.10 [HackerSchool] Level15 (0) 2011.05.10 [HackerSchool] Level14 (0) 2011.05.10 [HackerSchool] Level13 (0) 2011.05.10