반응형

HackCTF 문제 풀이 / Web - 마법봉 (100)

 

https://ctf.j0n9hyun.xyz/challenges#%EB%A7%88%EB%B2%95%EB%B4%89

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

마법봉 - 100 문제를 풀어보겠습니다.

우선 아래 링크에 접속해보겠습니다.

http://ctf.j0n9hyun.xyz:2029/

접속해보면 아래와 같이 출력됩니다. 

View Source 버튼을 눌러서 소스코드를 확인해보겠습니다.

url의 전달인자 flag를 input에 넣고, input을 SHA1으로 암호화한 값이 md5로 240610708을 암호화한 해시값과 같으면 플래그가 출력된다고 합니다. 

240610708을 md5로 암호화한 값을 아래와 같이 0e462097431906509019562988736854 로 결과를 출력합니다.

Magic Hash는 PHP에서 ==를 통해 비교시 생기는 type conversion에 의한 취약점입니다. 

0e로 시작되고 뒤에 있는 값들이 모두 숫자라면, string 형태이지만, 비교 연산시에는 float로 Type Casting 되기 때문에 문제가 발생합니다.

비교하는 대상도 0e로 시작되는 값이라면, 두 값이 모두 exponent로 바뀌어 0이라는 값을 갖게 되므로 연산이 참이 됩니다. 

 

따라서 SHA1 으로 되는 값이 0e로 시작되면 되기 때문에 아래 사이트에 있는 10932435112 숫자 문자열을 이용하면 됩니다. 

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

 

Magic Hashes | NTT Application Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator.

www.whitehatsec.com

10932435112를 입력하여 제출해보겠습니다.

그러면 아래와 같이 Flag를 확인할 수 있습니다.

반응형

+ Recent posts