[Webhacking.kr] old-19 (쿠키 & Base64 활용문제)

728x90
반응형

1. 서론

본 포스팅 시리즈는 webhacking.kr의 문제 풀이를 하면서 정리한 자료이다.
필자가 풀이한 방법들이기 때문에 완벽하지 않을 수도 있다는 점을 참고 바란다. (지적과 조언은 언제나 환영이다)

이번 문제는 old-19, 쿠키와 Base64 활용이 필요한 문제이다.

2. 본론

이번 문제에 처음 접속하면 이러한 화면을 볼 수 있다. 따로 제공되는 소스코드도 없고 id 입력창과 제출버튼이 있다.

그리고 제출버튼을 눌러보면 GET 파라미터 "id"로 "admin"이라는 문자열이 전달되었고 페이지에는 "you are not admin"이라는 문자열이 출력된다. 아마 이번 문제는 admin으로 로그인하는 것이 해결 목표인듯하다.

그래서 이번엔 "admin"이라는 문자열 대신 다른 임의의 문자열을 보내보았다.

"hello"라는 문자열을 보냈더니 페이지에 "hello hello"라는 문자열이 출력되었다. logout 버튼은 눌러도 딱히 별다른 기능은 없고 페이지의 새로고침만 이루어진다. 근데 한가지 이상한 점은 새로고침을 했는데도 "hello hello"라는 문자열이 사라지지 않고 남아있으며, 처음에 보았던 입력창과 제출버튼이 나타나지 않는다. 페이지를 아예 나갔다가 들어와도 똑같은 "hello hello"라고 출력하는 것을 봐선, 나의 접속 정보를 저장하고 있는듯하다. 그렇다면 분명 쿠키 값으로 무언갈 저장하고 있다는 것인데,

아니나 다를까 "userid"라는 이름의 쿠키가 하나 저장되어있는 모습을 볼 수 있다. 이 쿠키 안에는 Base64로 인코딩된 문자열이 있다.

혹시 몰라서 해당 문자열을 디코딩해보았는데, 뭔가 HEX로 추정되는 문자열이 나왔다. 그런데 저 디코딩된 문자열을 ASCII로 변환해보았지만 깨지기만 할 뿐 별다른 소득은 얻지 못했다.

userid 쿠키의 값을 지우고 새로고침하면 우리가 처음에 보았던 입력창을 볼 수 있었고, 여러가지 문자열들을 같은 방법으로 테스트 해보았는데 알 수 있었던 점은

  • 쿠키값은 무작위 값은 아니다. GET 파라미터 "id"의 값에 따라 쿠키값이 달라지긴 하지만, 그렇다고 똑같은 문자열을 넣었을때 다른 쿠키값이 나오진 않았다. 쿠키값은 "id"의 값에 따라 일정하게 변화한다.
  • 쿠키값을 지우려고 하다가 실수로 쿠키값 전체를 지우지 않고 일부만 지우고 새로고침을 했는데 입력창이 보이지 않고 원래 입력했던 문자열의 일부분이 지워진채로 출력되었다. 문자마다 매칭되는 인코딩된 결과가 고정되어있는 것으로 추정된다.

우리가 "admin"을 로그인하려면 기본적으로 입력창에 "admin"을 입력하고 쿠키값을 얻어야 로그인이 되는거지만 문제는 우리가 입력창에 "admin"을 입력해서 제출하면 거부당한다는거다. 하지만 위와 같은 사항으로 인해 우리는 직접 입력창에 "admin"을 입력하지 않고도 "admin"에 입력했을 때에 얻을 수 있는 쿠키 값을 찾아낼 수 있다.

"admi"를 입력했을 때 쿠키값 -
MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE=
(Base64 디코딩 결과: 0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a8741)

"n"을 입력했을 때 쿠키값 -
ZTJiYTkwNWJmMzA2ZjQ2ZmFjYTIyM2QzY2IyMGUyY2Y3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ==
(Base64 디코딩 결과: e2ba905bf306f46faca223d3cb20e2cf7b8b965ad4bca0e41ab51de7b31363a1)

위와 같은 결과가 나왔고 이제 디코딩된 결과를 결합하여 "admin"을 입력했을때의 쿠키값을 찾아보자면,

"admi" + "n" = 0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a8741e2ba905bf306f46faca223d3cb20e2cf7b8b965ad4bca0e41ab51de7b31363a1
(Base64 인코딩 결과: MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDFlMmJhOTA1YmYzMDZmNDZmYWNhMjIzZDNjYjIwZTJjZjdiOGI5NjVhZDRiY2EwZTQxYWI1MWRlN2IzMTM2M2Ex)

이제 위 인코딩값을 쿠키 안에 넣고 새로고침을 하면 문제가 해결된다.

728x90
반응형