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



2번째 문제!
생각보다 난관이었다...(밤늦게 풀어서 그럴수있지만)



(Bad Compare 문제)



아래는 문제 화면이다.




(문제 페이지)



answer 값을 찾아서 get방식으로 전달해주면 된다.





(answer 값 찾기)



굉장히 헤멨었다..
이유는 전에 풀었던 워게임 문제에서 이런 비슷한게 있었던거 같은데
자리수만 맞춰주면 됬기 때문이다. 그래서 10글자의 아무값이나 넣어보기도하고
특수기호도 너보고 url 인코딩도 해보다가
php 비교 연산자의 취약점을 찾아보다가 (게다가 문제에서는 === 연산자를 사용한다.)
answer에 적혀있는 값을 찾아내야겠다는 생각으로 바뀌었다.

분명 저기서 나오는게 깨져 나오는 것일것이라고 생각하고
버스슈트를 켰다.

그리고 돌아오는 응답 내용을 열어보았다.



(응답 내용)



열어보니 여기도 깨져 보였다. 
그래서 Hex로 열어보았더니 값이 보인다!




(등장한 값)



신나서 이 값을 복사하여 답을 전송했다.




(거의 정답)



우롱... 앤서...

이게아닌가..
이번에는 Hex에 나온 값을 %붙여서 (url인코딩해서) 보내기로 했다.
그게 아무래도 더 정확하게 보낼 수 있을 것 같았다.




(answer)



정답!!
:)
flag가 보인다.

전에 풀었던 기억에 메달렸다면 아마 더 오래 헤맸을듯 하다.!




(문제 해결)


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

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(1/500) Solve Me - Warm up  (0) 2017.04.06

+ Recent posts