문제접속하면, 삐애로가 마법봉을 꺼내려하는사진이있고, 소스코드보기가 있다.
소스코드를 보면 md5("240610708") 값과
sha1("input") 값이 같을때 flag를 출력해준다.
0e4620~~(숫자) 형식을 취하고있다.
(참고로 Xe(+)Y는
X * 10^Y이다.)
(ex : 3e2 혹은 3e+2 = 3 * 10^2 = 300 )
(주로 계산기에서 너무큰 결과가 나오면
이런식으로 표시된다.)
이런설명을 한 이유는
0e~~ 는 결국 0 이라는걸 알수있다.
php에서는 Auto type casting (type juggling)을 지원한다.
그리고, string < float < int 순으로 자료형을 선호한다.
0e4620~ == 0e~~ 를 비교할때, 둘 다 문자열이지만,
float형식으로 바꿀수있기에, 더 선호하는 float형식으로바꿔서
0==0 이 되어 같아지게된다.
그렇다면 sha1 암호화 해서 0e~ 형식을 갖는 값을 찾으면된다.
메인페이지에 '해쉬' 와 '마법' 이라는 키워드가 있다.
[매직해쉬]
위 블로그에서 찾아본 매직해쉬목록이다. sha1로 암호화해서 0e 형식을 갖는건
10932435112 인걸 알 수 있다.
따라서 10932435112를 입력하면 문제가풀리게된다.
[배운점]
매직해쉬라는 취약점을 알게되었고, 이걸 어떻게찾았는지 대단한 것 같다.
그리고 php의 type juggling 에 대해 알게되었고, 이것으로 발생하는 취약점을 배웠다.