19번 문제를 접속하면 아래와 같은 화면을 볼 수 있다.
화면에서 id에 admin이 작성되어 있는 대로 제출 버튼을 눌러주었더니 'you are not admin'이라는 문구가 몇초간 출력되는 것을 볼 수 있었다.
id 값에 이번에는 guest를 넣었더니 'hello guest'가 출력되는 것을 확인할 수 있었다. 이를 통해 id에 입력한 값이 'hello ~'의 형태로 출력되고 있음을 유추할 수 있다.
id 값을 guest로 입력하였을 때, 소스코드는 크게 중요한 것이 없어 보여 쿠키값을 확인해보았더니 'userid'라는 이름의 쿠키값이 있는 것을 볼 수 있었다.
이 쿠키값을 혹시몰라 URL base64 인코딩을 해보았더니 크게 얻을 수 있었던 점은 없었지만
'%3D'가 인코딩 결과, '='을 의미한다는 것을 알 수 있었다.
따라서 base64 형태로 인코딩과 디코딩을 반복해보았지만, 특별하게 알 수 있는 결과물은 없어 다른 방법을 시도해보았다.
현재 id 값에 guest를 넣은 후 다른 값을 넣어보기 위해 로그아웃 버튼을 눌렀지만 로그아웃이 되지 않아 주소창에 '?id=' 형태의 파라미터를 사용하여 id 값에 1을 넣어보았더니 hello 1이 출력되는 것을 볼 수 있었다.
이때, 쿠키값은 아래 이미지와 같이 조금 짧게 나타나는 것을 볼 수 있었다.
이 쿠키값에 들어있는 값을 base64 형태로 디코딩 하였더니 아래와 같은 값을 볼 수 있었다.
사실 이 부분을 보고서도 어떻게 해야할지 몰라 구글링을 해보니 디코딩 된 해시값의 길이가 32자리이므로 MD5 해시값임을 확인할 수 있었다.
현재 해쉬값이 id 파라미터에 1을 넣었을 때 나온 값이므로 1을 MD5로 암호화해주어 비교해보자
1을 MD5로 암호화한 값과 1을 id 파라미터에 넣었을 때 나온 쿠키값을 디코딩한 값이 일치하는 것을 확인할 수 있었다.
문제 해결을 위해 규칙성을 찾고자 id 파라미터에 11을 넣어보니
다음과 같은 쿠키값을 볼 수 있었고, 이를 다시 디코딩을 시도해보니
id에 1을 입력했을 때 나온 디코딩값이 2번 반복되는 모습을 볼 수 있었다.
따라서 이 문제에서는 입력한 문자열을 각각 MD5 형태로 암호화하고 있고, 이를 모두 합쳐서 base64로 암호화한 후, 쿠키값에 이를 입력하면 해결할 수 있을 것 같다.
- a : 0CC175B9C0F1B6A831C399E269772661
- d : 8277E0910D750195B448797616E091AD
- m : 6F8F57715090DA2632453988D9A1501B
- i : 865C0C0B4AB0E063E5CAA3387C1A8741
- n : 7B8B965AD4BCA0E41AB51DE7B31363A1
'admin'의 각각의 글자들을 MD5 형태로 암호화 하면 위와 같은 값을 얻을 수 있었고, 이를 모두 합치면 아래와 같은 값을 확인할 수 있었다.
0CC175B9C0F1B6A831C399E2697726618277E0910D750195B448797616E091AD6F8F57715090DA2632453988D9A1501B865C0C0B4AB0E063E5CAA3387C1A87417B8B965AD4BCA0E41AB51DE7B31363A1
이제 이 값을 인코딩을 하면 아래와 같은 값을 얻을 수 있었고, 이를 쿠키값에 입력해보자.
쿠키값에 입력해보면 당연히 문제가 해결될 수 있을줄 알았지만...
아무리 = 부분을 '%3D'로 바꾸어보아도 오류가 발생하는 모습을 확인할 수 있었다.
오류 해결을 위해 구글링을 여러개 해보니, 다른 사람들과 내 풀이의 가장 큰 차이점은 'admin'을 각각 md5로 암호화 한 값 중 알파벳이 모두 대문자로 적혀있었다는 것이다. 이를 소문자로 변경해준 후, 다시 합치고 base64 인코딩과 url 인코딩을 각각 진행해주니 쿠키값에 아래와 같은 이미지처럼 넣을 수 있었다.
드디어 문제 해결!!
이 문제를 풀면서 암호화 과정이나 인코딩, 디코딩 과정을 거칠때에는 영어 대소문자 구분도 신경쓰며 진행해야겠다.
'CTF' 카테고리의 다른 글
[RootMe] Javascript - Authentication 2 (0) | 2023.09.23 |
---|---|
[RootMe] HTTP - Cookies (0) | 2023.09.23 |
[Webhacking.kr] old-42 write-up (0) | 2023.09.20 |
[Dreamhack] 🌱 simple-web-request (0) | 2023.05.25 |
[Dreamhack] ex-reg-ex (0) | 2023.05.25 |