본문 바로가기
Wargame Write-Up/HackCTF

[HackCTF] (Web) Time 풀이

by snwo 2020. 3. 10.

<?php
$flag = "???";
if(isset($_GET['time'])) {
    if(!is_numeric($_GET['time'])) {    
        echo '시간은 숫자만 됩니다!';
    } else if($_GET['time'] < 60 * 60 * 24 * 30 * 2) {
        echo '시간이 너무 짧습니다!'; 
    } else if($_GET['time'] > 60 * 60 * 24 * 30 * 3) {
        echo '시간이 너무 깁니다!';
    } else {
        sleep((int)$_GET['time']);
        echo "flag is ",  $flag;
    }
    echo '<hr>';
}
?>

접속하면 나타나는 코드다. Time값을 가져와 숫자인지 검사 후, 5184000~7776000 사이에있는지 검사한다.

그리고 time값 만큼 sleep 한 뒤 flag를 출력해준다.

5184000초면 약 2달이란 시간인데, 그만큼 기다릴 수 없으니 다른 방법을 찾자.


2020/03/09 - [Wargame Write-Up/HackCTF] - [HackCTF] (Web) 마법봉 풀이

 

[HackCTF] (Web) 마법봉 풀이

문제접속하면, 삐애로가 마법봉을 꺼내려하는사진이있고, 소스코드보기가 있다. 소스코드를 보면 md5("240610708") 값과 sha1("input") 값이 같을때 flag를 출력해준다. 0e4620~~(숫자) 형식을 취하고있다. (참..

snwo.tistory.com

저번에 나온 php의 type juggling 을 이용해 풀 수 있는 문제다.

is_numbric 함수는 5e+2  등의 지수형태도 숫자라고 판단한다.

그리고 sleep함수에서 (int) 형으로 캐스팅한다. 그러면 소수점이하는 날라가버린다.

 

이 두가지 정보로 입력값을 만들어보자.

5.184001e+6 을 입력하면, 5184000~7776000 사이의 숫자고, 

int형으로 캐스팅하면 . 이하는 날라가서 5초 sleep 하고 flag가 출력된다.