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

[HackCTF] (Web) 마법봉 풀이

by snwo 2020. 3. 9.

문제접속하면, 삐애로가 마법봉을 꺼내려하는사진이있고, 소스코드보기가 있다.

 

소스코드를 보면 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~ 형식을 갖는 값을 찾으면된다.

 

메인페이지에 '해쉬' 와 '마법' 이라는 키워드가 있다.

 

[매직해쉬]

 

https://blog.whitehatsec.com/magic-hashes/

위 블로그에서 찾아본 매직해쉬목록이다. sha1로 암호화해서 0e 형식을 갖는건

10932435112 인걸 알 수 있다.

따라서 10932435112를 입력하면 문제가풀리게된다.

 

[배운점]

 

매직해쉬라는 취약점을 알게되었고, 이걸 어떻게찾았는지 대단한 것 같다.

그리고 php의 type juggling 에 대해 알게되었고, 이것으로 발생하는 취약점을 배웠다.