흠.. 플래그 값을 얻으려면 chk라는 변수가 true로 유지되어야 하는 것 같다.
유지조건을 살펴보니
첫번째로는 ctype_alpha 함수를 통해 v1에 알파벳 외의 다른 문자가 있으면 안된다.
두번째로는 is_numeric 함수를 통해 v2에 숫자 외의 다른 문자가 있으면 안된다.
마지막으로 md5로 출력한 hash 값이 서로 같아야 한단다.
서로 다른 값을 md5로 돌려서 같아야 된다고..? 아무리 해쉬충돌이 발생할 수 있다지만
그걸 찾아내라는 것도 아닌거 같고 찾고 싶지도 않다.
뭔가 취약점이 있을거 같다.
그럼 그렇지. 찾아보니 php magic hash 취약점이라는게 존재한다.
0e로 시작하는 문자열을 비교하면 typecast가 적용이 되어서 우선순위가 더 높은 float형으로 비교가
되어 둘다 0이 된다는 뜻이다.
즉, md5를 통해 출력된 해쉬 값이 "0e어쩌고"=="0e어쩌고" 형식이되면 0=0으로 바뀌어 비교가 되어
결과가 true가 되게 된다.
오호라...신기하구만...
그러면 해쉬 값이 0e가 나오는 문자열만 찾으면 될 것 같다.
aabg7XSs aabC9RqS 240610708 QNKCDZO
대충 찾아보니 이렇게 4개 정도를 찾았다.
저중에서 v1은 알파벳만이어야하니까 QNKCDZO를 쓰고 v2는 숫자만이니까 240610708을 써보자.