Wargame/Webhacking.kr

Webhacking.kr old 4번 문제 풀이

esyeonge 2021. 7. 1. 18:44

view-source를 눌러서 소스 코드를 보자.

 

코드를 해석하면 다음과 같다.

1. 10000000부터 99999999 숫자 중 하나 + salt_for_you를 더한 문자열을 hash에 저장한다. (ex. 10001111salt_for_you)

2. 1에서 수행한 결과 값이 담긴 hash를 chall4 세션값에 넣는다.

3. hash 변수에 대해서 sha1을 500번 수행해준 후 hash 변수에 저장한다.

4. hash 변수에 있는 값을 화면에 출력한다. (sha1을 500번 수행한 결과)

5. 사용자가 password에 입력한 값과 chall4의 세션값이 같으면 문제가 풀린다!

 

우리가 알고 있는 값은 sha1을 500번 수행한 hash 값이다. 

문제는 sha1이 해시함수여서 복호화를 할 수 없다는 것이다!

 

이때 사용할 수 있는 게 바로 레인보우 테이블이다.

레인보우 테이블은 해시 함수를 사용해서 만들 수 있는 값들을 모두 저장하여, 원래 값을 알아내는 방법이다.

이 경우에는 10000000salt_for_you부터 99999999salt_for_you까지 sha1을 500번 수행한 값들을 모두 저장하여,

문제에서 주어진 hash 값이 어떤 문자열에 해당하는지 알아낼 때 사용된다.

 

그럼 레인보우 테이블을 만들어보자.

숫자의 범위가 커서 1000000부터 19999999에 해당되는 값만 구해서 문제를 풀었다.

이때 해시값은 용량 문제 때문에 전체를 다 저장하는 것이 아닌 앞의 8자리만 저장하였다. 

만약 전체 범위를 다 저장하고 싶으면 멀티 프로세싱을 이용하면 된다!

 

문제에서 주어진 해시값에 해당하는 숫자를 찾은 뒤, 입력하였더니 문제가 풀렸다!