Wargame/wargame.kr2018. 7. 20. 14:56

문제 페이지는 다음과 같다.



소스를 보고 무슨 문제인지 알아보자.



PHP에서, strcmp 함수에 배열을 파라미터로 넘겨주면 오류와 함께 NULL로 반환한다.

(참고: http://hackability.kr/entry/PHP-strcmp-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D-%EC%9A%B0%ED%9A%8C)

또한, PHP에서 ==을 사용한 느슨한 비교를 했을 때,  NULL==0이 참이 되는 것을 이용해 조건문을 참으로 만들어 줄 수 있다.



FLAG를 얻을 수 있었다. 현재 PHP 7에서도 안전한지는 자세히 모르지만 가능하면 ===를 사용해 강한 비교를 하자.



'Wargame > wargame.kr' 카테고리의 다른 글

9. md5 password  (0) 2018.07.19
8. md5_compare  (0) 2018.07.19
7. fly me to the moon  (0) 2018.07.19
6. DB is really GOOD  (0) 2018.07.19
5. WTF_CODE  (0) 2018.07.18
Posted by BinZIP
Wargame/wargame.kr2018. 7. 19. 16:55

문제 페이지에서 패스워드를 입력하라는 폼만 나온다.



소스를 봐서 어떤 문제인지 확인해봤다.



이 문제의 특이한 점은 md5 함수에 두 번째 인자로 true를 넘겨줬다는 것이다.

md5 함수에 2번째 인자로 true를 주면 raw output이 나오게 되는데, 이 output에 1' or '1 과 같은 결과가 나오도록 하는 해시 값을 찾으면 인젝션이 가능하게 된다.

(참고: http://bbolmin.tistory.com/77) 


해당하는 해시 값을 입력하고 로그인하면 FLAG를 얻을 수 있다.



'Wargame > wargame.kr' 카테고리의 다른 글

11. strcmp  (0) 2018.07.20
8. md5_compare  (0) 2018.07.19
7. fly me to the moon  (0) 2018.07.19
6. DB is really GOOD  (0) 2018.07.19
5. WTF_CODE  (0) 2018.07.18
Posted by BinZIP
Wargame/wargame.kr2018. 7. 19. 16:03

문제 페이지로 들어가면 두 값을 입력하도록 폼이 있다.



소스보기로 어떤 동작을 하는지 확인해보았다.



첫 번째 입력 창엔 알파벳만 포함하는 문자열을, 두 번째 입력 창엔 숫자만 포함하는 문자열인지 검사한다.

그리고 두 입력값을 MD5로 해시화해서, 같을 때 키 값을 얻을 수 있다.

이번 문제는 MD5의 충돌이 발생하는 하나는 알파벳으로만, 다른 하나는 숫자로만 구성된 문자열 한 쌍을 찾아야 하는 것이다.


예전에 이와 관련해 php의 md5 magic hash라는 특수 동작이 있다는 것이 생각나서 구글에 검색해보았다.

(문제와 큰 관련은 없지만 참고하시려면: https://blog.lael.be/post/1238)

검색하는 도중에 영문과 숫자로 된 두 문자열의 해시 값이 같다는 글을 찾았고, 바로 넣어보았다.



FLAG를 얻을 수 있었다.



'Wargame > wargame.kr' 카테고리의 다른 글

11. strcmp  (0) 2018.07.20
9. md5 password  (0) 2018.07.19
7. fly me to the moon  (0) 2018.07.19
6. DB is really GOOD  (0) 2018.07.19
5. WTF_CODE  (0) 2018.07.18
Posted by BinZIP