3번째로 풀이할 문제이다.

Solve me 의 Winter Sleep 문제이다.
이 문제를 풀면서 느낀것이 문제이름 잘지었네~ 라는 생각이 들었다. :)



(Winter Sleep)



아래는 문제 페이지이다.



(문제 페이지)



코드를 보면 단순하다. time이라는 변수에 값을 넣어 get방식으로 전달하면 된다.

그 값이 특정값 이상 이하이어야하고
그 값동안 sleep 한 후 flag를 보여준다.
음 그렇군! 초를 계산해볼까?

php online interpreter를 이용하여 계산하였다.



(sleep 할 시간 계산)



오? 간단한데? 저 값을 보내주었다.





(7776000 값 전달)




...






...


...


음? 기네?
초단위니까 몇분기다려야되는거지?






(시간 단위)



시간단위로 2160...
2160 시간.. 날짜로는 90일..
뭔가 잘못되어가는 기분이 들었다.

그럼 최소 시간으로 잡아보자! 라는 생각으로 계산해보았지만...



(최소)





(최소 시간)




(최소 60일)




이쯤 되니 아! 60일 정도 자고 일어나면 되겠다 라는 생각이 들었다.

말도 안되는 소리같고..
이쯤되서 별것들에 눈길을 주었다.
is_numeric 함수
error_reporting 함수

게다가 왜 sleep 앞에 int로 형변환을 해주었을까?
구지? is_numeric으로 숫자인지 검사해놓고서는..




(의심 대상)



오류 리포팅을 하지 않겠다? 라는 의미로 저 구문이 있었다.

sleep 에서 에러를 유발시켜서 sleep을 패스시키고 flag를 확인하는 건가?

그렇기 위해서는 우선 is_numeric을 우회할 수 있어야 했다.

그래서 php.net 공식 홈페이지에서 is_numeric을 찾아보았다.



(is_numeric)




여기서 눈에 딱 들어온건 바로
e
지수표현도 is_numeric에서 true로 판단한다는 것이었다.

이때 아하!
하고 모든것이 퍼즐처럼 맞춰졌다.

바로 그렇기 때문에 sleep 앞에 int로 형변환해주었고
e 지수표현으로 소수로 넘겨주어 int로 바뀌면 소수점들은 날라가니까 
기다릴만한 시간이 되는 거였다.

그리하야
time에 5.184e6  을 넘겨주고 flag를 얻을 수 있었다.




(문제 해결)



(문제 해결)


'WarGame > 500 Project' 카테고리의 다른 글

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(2/500) Solve Me - Bad Compare  (0) 2017.04.06
(1/500) Solve Me - Warm up  (0) 2017.04.06

+ Recent posts