반응형

HackCTF 문제 풀이 / Web - Time (150)


https://ctf.j0n9hyun.xyz/challenges#Time

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

Web - Time(150) 문제를 풀어보도록 하겠습니다. 

우선 아래 링크에 접속해 보겠습니다.

http://ctf.j0n9hyun.xyz:2032/

접속해 보면 아래와 같은 php 코드가 출력됩니다. 

아래 코드를 분석해 보겠습니다. 

먼저, time이라는 변수를 가져와, is_numeric() 함수를 통해 이 변수의 값이 숫자인지 검사합니다. 

 

그리고 그 숫자가 60 * 60 * 24 * 30 * 2 의 숫자보다 크거나 같고, 

60 * 60 * 24 * 30 * 3의 숫자보다 작거나 같은 숫자가 입력되어야 마지막 else문으로 진입할 수 있습니다. 

하지만, else 문으로 들어가면, 그 변수의 값으로 sleep() 함수를 호출하고, flag를 출력하는데, 

그 변수의 값이 2달, 3달에 대한 초가 입력이 되기 때문에, 2달, 3달은 기다려야 flag 값을 가져올 수 있습니다.

 

이때, php의 취약점을 이용하여 문제를 해결할 수 있습니다. 

60 * 60 * 24 * 30 * 2 = 5184000 입니다. 

지수형으로 표현해보면 5.18400e6 입니다. 

php에서는 5.18400e6를 (int) 형으로 형변환 할때, 소수점 이하는 잘라버리기 때문에 5가 됩니다. 

그러면 결국에는 sleep(5)가 되어 5초 이후에 flag를 확인할 수 있습니다.

반응형

+ Recent posts