wargame/webhacking.kr

webhacking.kr 4번 풀이

LimeLee 2018. 8. 8. 17:07

webhacking.kr 4번 풀이

webhacking.kr은 문제 목표가 뚜렷해서 공부하기 편하지만

가끔 무슨 의도의 문제인지 모르는 문제들이 있다.

그 중 하나인 문제 같다.

 



[HINT]


1. base 64

2. Rainbow Table





문제는 Password를 입력할 수 있는 textbox와 summit 버튼, 알 수 없는 문자열을 볼 수 있다.

뒤에 '==' 패딩되어 있는 것을 보아 base64로 인코딩된 문자열인 것을 확인 할 수 있다.

알파벳 대소문자, "+", "/" , "="으로 이루어져있고, 24bit단위로 인코딩 되기 때문에 24bit단위가 아닌 문자열의 끝에는 "=", "=="으로 패딩된다. 24bit 단위인 문자열은 패딩 문자 "="가 붙지 않으므로 패딩 문자가 없다해서 base64가 아닐거라는 실수는 하지 말자.



base64 decoding 해본 결과 40자리의 문자열이 나온 것을 볼 수 있다.

물론 이는 Password가 아니다. 

40자리의 0-9,a-f로 이루어진 문자열을 보면 hash 알고리즘을 통해 만들어진 hash일 것이라 추측할 수 있다.

hash의 종류와 길이는 https://en.wikipedia.org/wiki/List_of_hash_functions 여기서 볼 수 있다.


하지만 hash는 일방향 함수이기 때문에 base64와 같이 복호화를 할 수 없다.

암호화를 하는 과정에서 원본 문자열을 복호화 할 수 없도록 뭉개버려 선형적 관계를 없애버린다.

hash의 다른 특성 중 하나는 입력 값이 같으면 출력 값인 해쉬는 항상 동일한 값을 나타낸다.

그래서 해당 해쉬 알고리즘의 입력 값에 대한 해쉬 값을 알고 있으면 같은 해쉬 값에 대한 입력값을 알아낼 수 있다.

이런 입력 값에 대한 해쉬값을 저장해놓은 테이블을 레인보우 테이블이라고 한다.


레인보우 테이블은 구글에 검색하면 확인 할 수 있다.

참고로 대부분 페이지를 이용하는 사람의 입력을 페이지의 DB에 저장해놓으면서 DB 데이터를 늘려가는 방식이므로

본인의 실제 패스워드는 웬만하면 직접 알고리즘을 만들어 돌리는 것이 좋다.



하지만 40 * 4 = 160bits에 해당하는 hash는 여러 개이다. (위키에는 나와있지 않지만 sha-0도 160bits에 해당된다.)

사용된 hash는 풀어보면 sha-1인 것을 알 수 있지만, 도저히 모를 경우, https://md5hashing.net/hash 에서 search by all hash types를 이용하자. 

모든 해쉬에 대입해 찾아보기 때문에 시간은 오래 걸릴 수 있다.

해당 해쉬값을 sha-1 레인보우 테이블에 찾아본 결과 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3이라는 것을 확인 할 수 있다.



이는 40글자의 sha-1 hash 값이다.

다시 레인보우 테이블에 넣어 결과 값을 확인하자.



결과 값으로 test를 반환한다.

Password 값으로 test를 요청하면 통과할 수 있다.

'wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 8번 풀이  (0) 2018.08.08
webhacking.kr 17번 풀이  (1) 2018.08.08
webhacking.kr 14번 풀이  (1) 2015.08.14
webhacking.kr 6번 풀이  (1) 2015.08.13
webhacking.kr 15번 풀이  (0) 2015.08.13