소스코드를 내용을 살펴보면 "$_POST['key']로 넘어오는 것이 우리가 입력한 값이 되고 "$_SESSION['chall4']"와 같아야 solve()를 호출하는 것을 확인 할 수 있습니다.
"$_SESSION['chall4']"의 생성원리를 살표보면
rand함수를 통해 10000000 ~ 99999999까지의 숫자를 랜덤으로 뽑아 "salt_for_you"라는 문자열을 이어붙이고 "$hash"변수에 담아 세션을 저장하는 것을 확인 할 수 있습니다.
ex) 11111111salt_for_you
하지만 여기서 끝나는 것이 아니라 "$hash"변수에 저장된 "[랜덤숫자]salt_for_you"를 500번 sha1으로 해시화 하여 다시 "$hash"변수로 담아 페이지에 출력하는 구조입니다.
이 분석을 바탕으로 레인보우 해시테이블을 만들어 해시에 해당하는 문자열을 제출하면 이 문제는 해결 될 것으로 보입니다.
아래는 파이썬의 hashlib 모듈을 이용하여 만든 소스코드입니다.