카테고리 없음

wargame.kr - 10 (md5_compare)

MDIN1 2021. 2. 27. 22:35

wargame.kr - 10 (md5_compare).

열번째 문제다.

 

JUST COMPARE ONLY.

with the oher value :D

 

Start 버튼을 눌러 문제를 확인하자.

 

 

VALUE 1, VALUE 2에 대한 입력 폼이 있고 chk 버튼이 존재한다.

하단에는 view-source 를 눌러 소스코드를 확인할 수 있는데 다음과 같다.

 

VALUE 1 에 입력되는 값은 GET 메소드를 통해 $v1 변수에 들어가고

변수가 알파벳으로만 이루어져있는 경우 True를 반환하는 ctype_alpha 함수를 이용해

알파벳이 아닐경우 Wrong... 이 출력된다.

 

VALUE 2 또한 입력되는 값은 GET 메소드를 통해 $v2 변수에 들어가고

변수가 숫자로만 이루어져있는 경우 True를 반환하는 is_numeric 함수를 이용해

숫자가 아닐경우 Wrong... 이 출력되게 하고 있다.

 

그리고 $v1 값과 $v2 값의 MD5 값이 다를경우 또한 Wrong이 출력된다.

 

결국 코드를 분석해보면 알파벳으로만 이루어진 문자열과 숫자로만 이루어진 문자열의

MD5 해시값이 충돌되는 문자열을 찾아야하는데 

이는 구글링을 통해 찾았다

 

MD5 해쉬함수에 대한 Magic Hash 취약점이라는것을 찾을 수 있었는데

해쉬값을 비교하는것이 ===(엄격한 비교)가 아닌 ==(느슨한 비교)일 경우,

0e로 시작하는 해쉬값은 0으로 인식한다고 한다

 

md5('QNKCDZO')결과는 0e830400451993494058024219903391 → 0

md5('240610708')결과는 0e462097431906509019562988736854 → 0

 

 

각각 MD5 해쉬값이 다르지만 ==(느슨한 비교)일 경우 md5(240610708) == md5('QNKCDZO)이된다.

 

플래그 획득

 

 

플래그 입력

 

 

 

완료