본문 바로가기
CTF

[BSidesSF 2023 CTF] overflow

by skyepodium 2023. 4. 22.

1. 개요

overflow 문제

 

2. 분석

코드를 보면 c로 작성된 프로그램을 실행시킬때 argument를 받고 buffer_two 변수에 stcpy로 넣습니다.

buffer_one 변수에 저장된 값이 "hacked"일때 flag를 얻습니다.

 

따라서, stcpy함수는 문자열을 복사할때 메모리 제한이 없기 때문에 argument로 buffer_two의 메모리 8 바이트를 초과하는 문자열을 넣어 buffer_one을 hacked로 만듭니다.

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

int main(int argc, char *argv[]) {
	int value = 5;
	char buffer_one[8], buffer_two[8];

	strcpy(buffer_one, "one"); /* put "one" into buffer_one */
	strcpy(buffer_two, "two"); /* put "two" into buffer_two */

	printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
	printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
	printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);

	printf("\n[STRCPY] copying %d bytes into buffer_two\n\n",  strlen(argv[1]));
	strcpy(buffer_two, argv[1]); /* copy first argument into buffer_two */

	printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
	printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
	printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);

  /* Added for the CTF! */
  if(!strcmp(buffer_one, "hacked")) {
    char buffer[64];
    FILE *f = fopen("/home/ctf/flag.txt", "r");

    if(!f) {
      printf("\n\nFailed to open flag.txt: %s\n", strerror(errno));

      exit(1);
    }

    fgets(buffer, 63, f);
    printf("\n\nCongratulations! %s\n", buffer);
    exit(0);
  } else {
    printf("\n\nPlease set buffer_one to \"hacked\"!\n");
  }
}

 

"AAAAAAAAhacked"를 넣었습니다.

'CTF' 카테고리의 다른 글

[BSidesSF 2023 CTF] web-tutorial-2  (0) 2023.04.22
[BSidesSF 2023 CTF] web-tutorial-1  (0) 2023.04.22
[CryptoBurst CTF] breakfast  (0) 2022.08.20
[CryptoBurst CTF] postman  (0) 2022.08.20
[CryptoBurst CTF] ook what am i looking at  (0) 2022.08.20