9번째 푼 문제이다.
이 문제는 MD5 해쉬 충돌문제인 줄 알았지만 비교연산자의 취약점을 말하고 있던 문제였다.
md5_compare 문제이다!
(md5_compare 문제)
(문제 페이지)
그러면 소스코드를 확인해보겠다.
(소스코드)
결론적으로 v1입력에는 알파벳만
v2입력에는 숫자만 입력하여 md5가 같아야 된다는 것이다.
여기서 완전히 같은 값을 찾기는 힘드므로 == 비교연산자의 취약점을 이용해보도록 하자
== 비교연산자는 타입을 보지 않는다.
그리고 문자열에 숫자가 있다면 == 비교할 때 숫자로 인식하여 비교한다.
나는 e -> 지수표현을 이용할 것이다. 0e어쩌구~ 이렇게 나오면 0으로 인식한다는 것이다.
그러니! 숫자만 넣었을때 앞 두자리가 0e 영어만 넣었을때 앞 두자리가 0e면 된다는 것이다.
(숫자 입력)
(알파벳)
앞에 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 |