Information Security ˗ˋˏ ♡ ˎˊ˗

Security/WebHacking

[HackCTF Web] Time (is_numeric 함수)

토오쓰 2021. 2. 1. 17:24

문제

 

풀이

코드를 살펴보았을 때, 입력하는 문자열은 숫자만 가능하고 최소 5184000보다 커야 하고 최대 7776000보다 작아야 한다.

else문에서 sleep 함수가 있어서 5184001을 입력하면 5184001초 뒤에 flag가 출력되기 때문에 기다리는 것으로 해결해서는 안된다.

 

일단 is_numeric함수에 대해서 살펴보았다.

 

간단하게 살펴보면, is_numeric 함수는 지정한 파라미터가 숫자인지 아닌지 확인하는 함수이다.

함수에 대해 살펴보다가 취약점이 존재한다는 것을 알게 되었다.

is_numeric 함수를 살펴보면 정수형을 포함해, 지수 표현까지도 숫자로 인식한다고 한다.

 

5184001을 지수로 바꿔서 in_numeric 함숫값으로 들어가고, sleep 함수는 int형으로 형 변환이 되면서 소수점이 잘려서 5가 될 것이다.

5184001 = (지수 표현) 5.184e+6

 

알게 된 지식

is_numeric 함수

- 지정한 파라미터가 숫자인지 아닌지 확인하는 함수이다.

- 지정한 값이 숫자인 경우에는 true, 아닌 경우에는 false

- 정수형을 포함하여 지수 표현까지도 숫자로 인식한다.

- is_numeric(값)

 

sleep 함수

- 입력된 초만큼 PHP 코드의 실행을 지연시키는 역할을 하는 함수이다.

- sleep([지연시키고자 하는 초]);