사이트를 들어가보면 패스워드를 입력하는 란이 보입니다.

"[view-source]"를 클릭하여 소스코드의 구조를 파악해 봅시다.

소스코드를 내용을 살펴보면 "$_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 모듈을 이용하여 만든 소스코드입니다.

아래는 소스코드 결과물입니다.

이것을 10000000~99999999까지 다 돌린 후 비교하기에는 상당한 시간이 소요되므로

중간중간 "cat 파일명 | grep 해시값 " 으로 해시에 해당하는 문자열을 추출하여 적용하였습니다.

파일명 스펠링이 틀렸네요 ㅋㅋㅋㅋㅋ

위와 같이 해시값이 해당하는 10929172salt_for_you 문자열을 찾아 냈습니다.

이를 대입하면 아래와 같은 결과를 도출해 낼 수 있습니다.

챌린지4 클리어!

다음 문제도 열심히 풀어보겠습니다!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level6 (old)  (2) 2020.04.27
[webhacking.kr] Level5 (old)  (2) 2020.04.27
[webhacking.kr] Level3 (old)  (313) 2020.04.27
[webhacking.kr] Level2 (old)  (308) 2020.04.27
[webhacking.kr] Level1 (old)  (324) 2020.04.27

+ Recent posts