워게임/Wargame.kr Wargame.kr - md5_compare 작성자 - 알 수 없는 사용자 문제 - Start Start - view-source view-source - VALUE1, VALUE2를 입력하여 두 값의 MD5 해시값이 같으면 문제 해결. - 이 때, VALUE1의 값은 알파벳, VALUE2의 값은 숫자이어야 한다. - 이 문제의 해결을 위해서는 '매직해시(Magic Hashes)'에 대해 알아야한다. - 매직해시란 php의 비교연산자에서 발생하는 취약점이다. - php에서 느슨한비교연산자(==, !=)는 변수의 자료형을 비교하지 않는 취약점을 가지고 있다. - 변수의 값을 확인하여 자동으로 자료형을 변경하는데, 예를 들어 정수와 문자를 비교할 때 문자를 수로 변환한다. - 이를 이용하여 비교문에서 자료형을 float로 변환하게 하는 'e' 지수표기법을 이용하는 것이 매직해시이다. - 'e' 는 지수를 표현하는 방법으로서, 예를 들어 '1e3'의 의미는 1 * 10의 3승으로서 1*1000 이된다. - 여기서 0e...을 이용하는데 '0eN'는 0 * 10의 N승이므로 N에 어떤 숫자가 와도 0이 된다. - php의 느슨한 비교문에서 '0e..'지수법을 사용하면 자료형을 float로 변환하여 비교하게 된다. - 따라서 '0e'뒤에 숫자가 있는 형태라면 '0'이 되며 '0e123' 과 '0e456'은 (==)비교문에서 같은 값이라 할 수 있다. - 자세한 내용 참조 : https://www.whitehatsec.com/blog/magic-hashes/ - 그렇다면 MD5 해시값이 '0e + 숫자' 형태인 키값을 찾으면 이 문제를 해결할 수 있다. - 이 때의 키 값은 각각 알파벳, 숫자로 이루어진 2개가 있어야 할 것이다. - 이러한 매직해시 값의 MD5에서의 대표적인 키값으로 'QNKCDZO', '240610708'가 있다. - md5('QNKCDZO') : 0e830400451993494058024219903391 - md5('240610708') : 0e462097431906509019562988736854 - 두 해시 값 모두 '0e + 숫자' 형태이니 비교문을 우회할 수 있을 것이다. 문제해결 공유하기 게시글 관리 MSS '워게임 > Wargame.kr' 카테고리의 다른 글 Wargame - QR CODE PUZZLE (0) 2021.06.25 Wargame - DB is really GOOD (0) 2021.06.20 Wargame.kr - md5 password (0) 2021.06.04 Wargame.kr - strcmp (0) 2021.05.30 Wargame.kr - WTF_CODE (0) 2021.05.27 Contents 당신이 좋아할만한 콘텐츠 Wargame - QR CODE PUZZLE 2021.06.25 Wargame - DB is really GOOD 2021.06.20 Wargame.kr - md5 password 2021.06.04 Wargame.kr - strcmp 2021.05.30 댓글 0 + 이전 댓글 더보기