js문제여서 소스코드를 먼저 확인해봤는데,
자바스크립트 코드도 없고, 눈에 띄는 코드가 없었다.
id가 admin일 때, 제출버튼을 눌러보니 admin이 아니라고 출력됐다.
이번엔 id를 guest라고 입력하고 제출했더니, hello guest가 출력됐다.
그런데 logout버튼을 눌러도 첫 화면으로 돌아가지 않는다 ㅠ
쿠키를 확인해보니,
인코딩된 값이 userid 쿠키값으로 설정되어있었다. 인코딩된 값은 guest라고 예측할 수 있었다.
이 때 ! userid쿠키값을 보고 base64로 인코딩된 값이라는 것을 알아야 한다.
쿠키값을 base64 디코딩했더니, 이상한 문자열이 출력되었다ㅠ
base64 디코딩할 때, 기억해야할 점 !
%3D는 =으로 교체해서 디코딩해줘야한다.
디코딩된 값을 보니, guest가 base64가 아닌 다른 해시함수로 한번 더 인코딩된 것같다. (guest를 두번 인코딩한 것이라고 예측)
어떤 해시함수를 썼는지 추측하기 위해 디코딩된 값의 길이를 계산해보니, 160이 나왔다.
16진수로 표현되어있기때문에 비트 수는 160*4로 640비트.
대표적인 해시함수 md5,sha1,sha2 중 출력길이가 640비트인 해시함수는 없다.
guest가 5글자이기 때문에 640/5를 해보니 128 !
출력 해시값이 128비트인 해시함수는 md5이므로, md5로 인코딩한 값이라고 예측할 수 있다.
>>> hashlib.md5('g'.encode()).hexdigest()
'b2f5ff47436671b6e533d8dc3614845d'
>>> hashlib.md5('u'.encode()).hexdigest()
'7b774effe4a349c6dd82ad4f4f21d34c'
>>> hashlib.md5('e'.encode()).hexdigest()
'e1671797c52e15f763380b45e841ec32'
>>> hashlib.md5('s'.encode()).hexdigest()
'03c7c0ace395d80182db07ae2c30f034'
>>> hashlib.md5('t'.encode()).hexdigest()
'e358efa489f58062f10dd7316b65649e'
파이썬으로 guest를 각각 md5로 인코딩시켜보니 userid 쿠키값과 같은 것을 볼 수 있다 !
=>userid 쿠키값은 guest를 md5로 인코딩하고, 인코딩된 값을 base64로 또 한번 인코딩한 값이다.
admin을 각 알파벳마다 md5인코딩한 후, base64로 인코딩한 값을 userid 쿠키값으로 설정하면 문제 해결 !
>>> admin = hashlib.md5('a'.encode()).hexdigest() + hashlib.md5('d'.encode()).hexdigest() + hashlib.md5('m'.encode()).hexdigest() + hashlib.md5('i'.encode()).hexdigest() + hashlib.md5('n'.encode()).hexdigest()
>>> print(admin)
0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1
base64 인코딩 사이트 : https://www.base64encode.org/
'WEB > webhacking.kr (old)' 카테고리의 다른 글
webhacking.kr 24번 (0) | 2020.02.03 |
---|---|
webhacking.kr 20번 (0) | 2020.02.02 |
webhacking.kr 15번 (0) | 2020.01.27 |
webhacking.kr 18번 (0) | 2020.01.27 |
webhacking.kr 17번 (0) | 2020.01.27 |