-
md5_compareHacking/Wargame.kr 2018. 3. 11. 21:02
이번문제는 md5_compare
암호에 관심이 조금 생겨서 암호화에 관한 문제인가 했는데 관련은 되있지만 딱히 필요가 없었다.
우선 source가 주어진다.
해당 source에 취약점이 존재할 것이 분명했다. source를 보니 chk가 true로 초기화되어있는데
진행과정에따라서 false가 되었다. md5(v1) != md5($v2) 일 때 false이므로 둘을 같게 표현하면 된다는 것을 알게되었고
ctype_alpha와 is_numberic으로 보아서 md5 v1은 문자로만 md5 v2는 숫자로만 구성되어야 한다는 것을 알게되었고
비교는 둘다 string으로 하고 있었다.
이런 형식의 취약점에 대해서 알고있냐고 물어보는 출제의도라고 생각했다.
구글링을 해보니 php magic hash 취약점이 바로 이 문제의 key였다.
<참고>
php는 좌우가 같은 자료형이여도 최적의 자료형을 찾게 된다. (javascript는 같으면 굳이변환하지않음, mysql은 field type자료형으로 변환)
이 문제에서는 입력한 값을 md5로 해시하는데 이때 입력한 해시값이 취약점이 된다.
QNKCDZO와 240610708을 예시로 들면 둘은 md5 해시값이 다름에도 불구하고 php의 == 비고결과는 참이된다.
그 이유는 해당 입력값이 형변환이 일어나면서 해시값이 둘다 0e로 시작이되며
(0e어쩌구 저쩌구가 왜 같다고 인식하는가 ex> 0e3 = 0 * 10^3 = 0 임)
두 값을 string이지만 비교하게되면 ==으로 비교 시 float가 되어버리기 때문에 0e로 시작하는 둘을 0으로 인식해버리기 때문에
같은 값이되어 true가 된다. 그러므로 저 값들을 넣어주면 바로 flag를 준다!
해당 취약점을 방어하기위해서는 형변환을 일으키지 않는 ===으로 방어해주면 된다!
반응형'Hacking > Wargame.kr' 카테고리의 다른 글
WTF CODE (0) 2018.03.11 login filtering (0) 2018.03.11 img recovery (0) 2018.03.11 fly me to the moon (0) 2018.03.11 flee button (0) 2018.03.11 댓글