[Dreamhack CTF] baby-bof

Sungwuk·2024년 10월 8일
0

dreamhack

목록 보기
7/17

https://dreamhack.io/wargame/challenges/974

버퍼오버플로우 문제이다.

문제 코드

// gcc -o baby-bof baby-bof.c -fno-stack-protector -no-pie
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <time.h>

void proc_init ()
{
  setvbuf (stdin, 0, 2, 0); setvbuf (stdout, 0, 2, 0);
  setvbuf (stderr, 0, 2, 0);
}

void win () 
{
  char flag[100] = {0,};
  int fd;
  puts ("You mustn't be here! It's a vulnerability!");

  fd = open ("./flag", O_RDONLY);
  read(fd, flag, 0x60);
  puts(flag);
  exit(0);
}

long count;
long value;
long idx = 0;
int main ()
{
  char name[16];

  // don't care this init function
  proc_init (); 

  printf ("the main function doesn't call win function (0x%lx)!\n", win);

  printf ("name: ");
  scanf ("%15s", name);

  printf ("GM GA GE GV %s!!\n: ", name);

  printf ("|  addr\t\t|  value\t\t|\n");
  for (idx = 0; idx < 0x10; idx++) {
    printf ("|  %lx\t|  %16lx\t|\n", name + idx *8, *(long*)(name + idx*8));
  }

  printf ("hex value: ");
  scanf ("%lx%c", &value);

  printf ("integer count: ");
  scanf ("%d%c", &count);


  for (idx = 0; idx < count; idx++) {
    *(long*)(name+idx*8) = value;
  }

  
  printf ("|  addr\t\t|  value\t\t|\n");
  for (idx = 0; idx < 0x10; idx++) {
    printf ("|  %lx\t|  %16lx\t|\n", name + idx *8, *(long*)(name + idx*8));
  }

  return 0;
}

코드를 실행하면 win함수의 주소를 알려주소(0x40125b)를 알려주고 name을 입력받는다.

코드를 보면 scanf ("%15s", name); 로 입력 받고 있으므로 아래와 같이 15글자를 입력해본다.

스택값을 보면 7ffe4e623b40, 7ffe4e623b48에서
31,32 가 나오는걸 볼수 있는데 이건 숫자 1의 아스키코드 값(0x31),(0x32)이다.


또한 7ffe4e623b88 부분이 main 함수를 실행 시키는 부분인거 같다.
이제 이 부분을 win 함수의 주소값으로 바꿔주는것이 목표이다.


주어진 문제 코드를 보면 main 함수 안에 아래와 같은 코드가 있다.
이 코드는 name배열이 저장된 다음 줄부터 count 줄만큼 value로 수정한다. (스택 한 줄에 8바이트)


즉, count는 2이상으로, value는 0x40125b으로 입력하면 name이 저장되어 있는 곳을 넘어서 다른 값들이 수정되는 BOF가 발생하게 된다.

for (idx = 0; idx < count; idx++) {
    *(long*)(name+idx*8) = value;
  }

DH{62228e6f20a8b71372f0eceb51537c7f94b8191651ea0636ed4e48857c5b340c}

profile
보안전문가 꿈나무

0개의 댓글