[webhacking.kr] old-19
✏️ Check
원래는 id를 입력하는 창이 나타난다.
admin을 입력하면 'you are not admin'이라는 메세지가 나온다.
guest로 로그인하니 hello guest가 뜨고, logout 버튼은 있지만 실제로 logout이 되지는 않는다.
GET 방식으로 id=admin을 입력해도 다시 hello guest로 돌아온다.
🔎 Analyze
cookie 값을 보면 userid에 대한 cookie가 있는 것을 볼 수 있다.
보아하니 여러번 디코딩 또는 복호화를 해줘야 할 것 같다.
확인을 조금 더 쉽게 하기 위해 id=a로 변경해준다.
일단 %3D가 "=" 기호를 나타내는 것을 알 수 있고 그렇다면 1차적으로 base64 인코딩이 되어있음을 알 수 있다.
이처럼 32bit의 값이 나온다면 md5 암호화된 값일 가능성이 있다.
md5로 암호화되었던 것이 맞았다.
그럼 이제 userid의 cookie 값으로 admin이 들어갈 수 있도록 차례대로 암호화해준다.
🔓 Exploit
1. MD5 암호화 → 2. Base64 Encoding → 3. URL Decoding
MD5 암호화를 할 때 주의할 점은 각 자리를 하나씩 암호화를 해야한다는 것이다.
guest를 id로 전달했을 때, 전체 해시값이 32개 이상의 문자가 나왔다는 것은 각 자리를 하나씩 암호화했다는 것을 보여준다.
a: 0cc175b9c0f1b6a831c399e269772661
d: 8277e0910d750195b448797616e091ad
m: 6f8f57715090da2632453988d9a1501b
i: 865c0c0b4ab0e063e5caa3387c1a8741
n: 7b8b965ad4bca0e41ab51de7b31363a1
⇒ 0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1

