29, 1/2 회원가입  로그인  
   cjy
   Fedora 10 3번 문제 잘못됐습니다~ 확인 해주세요 !!

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=32 [복사]


talos->dark_mare 문제입니다.

아무리 생각해봐도 출제의도는 BSS에 Buffer를 오버플로우시켜 func 함수포인터를 변조해서 공략하라는 것 같은데요.

그런데 현재 이미지상의 문제를 보면

0x8049784 <data_start>: 0x00000000
(gdb)
0x8049788 <completed.5731>:     0x00000000
(gdb)
0x804978c <dtor_idx.5733>:      0x00000000
(gdb)
0x8049790 <func>:       0x08048454
(gdb)
0x8049794 <buffer>:     0x41414141
(gdb)
0x8049798:      0x41414141
(gdb)
0x804979c:      0x00000000

다음과 같이 buffer의 주소가 함수포인터보다 높은 곳에 있습니다.
(오버플로우가 불가능한 상태이지요)

몇개 테스트 해보니 선언 순서에 상관없이 포인터 변수가 일반 변수보다 더 낮은 곳에 위치하게 되는 것 같습니다.

머 다른 방법이 있는 건가 많이 찾아봤는데요
현재 문제에서는 아무리 생각해도 불가능 한 것 같습니다...

문제 확인 좀 해주세요!










#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buffer[4];
void (*func)(int, int, int);

void dummy(int argc1, int argc2, int argc3)
{
        printf("Do you wonna exploit me?\n");
        exit(1);
}

int main(int argc, char *argv[])
{
        if(argc != 2)
        {
                printf("argc Error!!\n");
                exit(-1);
        }

        // initializing buffer
        memset(buffer, 0, sizeof(buffer));


        func = dummy;

        // buffer overflow!!
        strcat(buffer, argv[1]);

        // initializing dummy registers
        asm("xor %ebx, %ebx");
        asm("xor %ecx, %ecx");
        asm("xor %edx, %edx");

        // jump into blackhole!
        func(0, 0, 0);
}

  Hit : 5519     Date : 2012/10/13 05:59



    
chofly 저도 여기서 막혔어요!!! 2012/11/13