9번째 푼 문제이다.

이 문제는 MD5 해쉬 충돌문제인 줄 알았지만 비교연산자의 취약점을 말하고 있던 문제였다.

md5_compare 문제이다!


(md5_compare 문제)



아래는 문제 페이지다.



(문제 페이지)



문제 페이지를 보면 입력값 2개가 보이고 chk 버튼이 보인다.

그러면 소스코드를 확인해보겠다.



(소스코드)



소스코드를 내가 나름 주석으로 분석했다.

결론적으로 v1입력에는 알파벳만
v2입력에는 숫자만 입력하여 md5가 같아야 된다는 것이다.

여기서 완전히 같은 값을 찾기는 힘드므로 == 비교연산자의 취약점을 이용해보도록 하자

== 비교연산자는 타입을 보지 않는다.
그리고 문자열에 숫자가 있다면 == 비교할 때 숫자로 인식하여 비교한다.

나는 e -> 지수표현을 이용할 것이다. 0e어쩌구~ 이렇게 나오면 0으로 인식한다는 것이다.
그러니! 숫자만 넣었을때 앞 두자리가 0e 영어만 넣었을때 앞 두자리가 0e면 된다는 것이다.

(숫자 입력)




숫자 해쉬 시 앞에 0e로 시작하니 이 값은 == 비교할 때 0이 될것이다. 또

(알파벳)




알파벳입력시
앞에 0e 이므로 == 연산시 0으로 취급될 것이다.

즉 두 값은 같다고 결과가 나올 것이고! flag를 ??

해보자!




(입력)



(결과)



문제 해결!


'WarGame > 500 Project' 카테고리의 다른 글

(11/500) Wargame.kr - type confusion  (0) 2017.04.15
(10/500) Wargame.kr - md5 password  (0) 2017.04.14
(8/500) Wargame.kr - fly me to the moon  (0) 2017.04.13
(7/500) Wargame.kr - WTF_CODE  (0) 2017.04.12
(6/500) Wargame.kr - flee button  (0) 2017.04.11

+ Recent posts