워게임/Wargame.kr

Wargame.kr - md5_compare

작성자 - 알 수 없는 사용자

문제


- Start

Start


- view-source

view-source

 

- VALUE1, VALUE2를 입력하여 두 값의 MD5 해시값이 같으면 문제 해결.

- 이 때, VALUE1의 값은 알파벳, VALUE2의 값은 숫자이어야 한다.

 

- 이 문제의 해결을 위해서는 '매직해시(Magic Hashes)'에 대해 알아야한다.

- 매직해시란 php의 비교연산자에서 발생하는 취약점이다.

 

- php에서 느슨한비교연산자(==, !=)는 변수의 자료형을 비교하지 않는 취약점을 가지고 있다.

- 변수의 값을 확인하여 자동으로 자료형을 변경하는데, 예를 들어 정수와 문자를 비교할 때 문자를 수로 변환한다.

- 이를 이용하여 비교문에서 자료형을 float로 변환하게 하는 'e' 지수표기법을 이용하는 것이 매직해시이다. 

 

- 'e' 는 지수를 표현하는 방법으로서, 예를 들어 '1e3'의 의미는 1 * 10의 3승으로서 1*1000 이된다.

- 여기서 0e...을 이용하는데 '0eN'는 0 * 10의 N승이므로 N에 어떤 숫자가 와도 0이 된다.

 

- php의 느슨한 비교문에서 '0e..'지수법을 사용하면 자료형을 float로 변환하여 비교하게 된다.

- 따라서 '0e'뒤에 숫자가 있는 형태라면 '0'이 되며 '0e123' 과 '0e456'은 (==)비교문에서 같은 값이라 할 수 있다.

 

- 자세한 내용 참조 : https://www.whitehatsec.com/blog/magic-hashes/

 

- 그렇다면 MD5 해시값이 '0e + 숫자' 형태인 키값을 찾으면 이 문제를 해결할 수 있다.

- 이 때의 키 값은 각각 알파벳, 숫자로 이루어진 2개가 있어야 할 것이다.

 

- 이러한 매직해시 값의 MD5에서의 대표적인 키값으로 'QNKCDZO', '240610708'가 있다.

- md5('QNKCDZO') : 0e830400451993494058024219903391

- md5('240610708') : 0e462097431906509019562988736854

 

- 두 해시 값 모두 '0e + 숫자' 형태이니 비교문을 우회할 수 있을 것이다.


문제해결

 

'워게임 > Wargame.kr' 카테고리의 다른 글

Wargame - QR CODE PUZZLE  (0) 2021.06.25
Wargame - DB is really GOOD  (0) 2021.06.20
Wargame.kr - md5 password  (0) 2021.06.04
Wargame.kr - strcmp  (0) 2021.05.30
Wargame.kr - WTF_CODE  (0) 2021.05.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.