[HackCTF/Web] 마법봉 (by.K4keye)

2019. 6. 17. 22:53CTF-WriteUp

Web 문제중 마법봉 문제를 풀어보았다.

? 소스를 볼수있는 버튼이 있길래 일단 소스부터 분석

 

240610708 을 md5로 해시 한 결과값 과

내가 입력한 값을 sha1 으로 해시한 결과값이 같은지를 물어보고있다.

 

일단 24061708을 해시화 하면 무엇이나오는지 확인해보자.

 

 

0E0E462097431906509019562988736854 라는 값과 내가입력한 값을 sha1한 값이 같아야한다.

 

 

 

일부 프로그래밍 언어에서는 일반 자료형이아는 자료형을 쉽게사용할수있는

자동 형변환 (Type Juggling) 를 제공하고있다.

 

변수에 정수를 넣으면 integer 

문자열을 넣으면 String 처럼 자동으로 그에 맞는 자료형으로 캐스팅을 해주게되는데

 

이 중에 숫자 포멧을 주의해야한다.

 

0xC 는 16진수 C를 의미하고

0o12 은 8진수 12을 의미하고

7e3 은 지수  10진수값에서 7*10^3(7000)을 의미한다.

 

여기서 지수에 특수한 경우가있다

앞의 계산하는 숫자가 0인경우이다.

 

0*10^3 = 0 

 

아무리 계산을 바꾸더라도 앞의 값이 0이라면 결과값은 모두 0일것이다.

예로

 

0e15163 와 0e1687489798 는 둘다 같은 0의 값이다.

 

이부분이 매직해시 취약점인데

 

만약 두변수의 값을 비교하는 조건문에서

한쪽은 0e15163 

반대쪽은 0e1687489798 

 

라고한다면 결과값은 같지않다 라고 생각을하겠지만

실제로는 같다고 나오는것이다.

 

 

매직해시 취약점을 이용하여

 

10932435112 을 입력하여 플었다.