[webhacking.kr] 19번 문제 풀이[MD5,Base64]

1 분 소요

💡 Webhacking.kr challenge(old) 19번 문제에 대한 풀이입니다.

문제

문제 화면

image

제출을 눌러보면 다음과 같이 admin이 아니라고 나옵니다.

image

소스 코드를 봐도 스크립트도 없고, 아무런 기능이 없습니다.

image

일단 guest로 로그인 해봅니다.

image

로그인이 됩니다.

쿠키를 확인 해 보니 다음과 같이 userid 라는 쿠키가 생겼습니다. 이를 이용해서 사용자 정보를 판단하는 것 같습니다.

image

문제 풀이

저는 이렇게 길게 인코딩 되어 있으면 크게 2가지 경우를 생각합니다.

  1. 인코딩 기법(Base64,rot13)
  2. 해시 값(md5,sha1)

우선 Base64 인코딩의 가장 큰 특징은 끝에 %3D(=)이 붙는 경우가 많다는 것입니다. 해당 문제도 Base64로 인코딩한 것으로 보입니다.

image

디코딩을 해보니 다음과 같이 길게 다시 16진수 값들이 나옵니다. 결과 값을 보니 이번에는 인코딩은 아닌것 같습니다. 그다음 경우의 수인 해시 값인지 확인을 하기 위해서는 문자열의 길이가 중요합니다.

image

글자가 총 160 바이트 입니다. 가장 대표적인 해시함수로는 md5, sha1이 있는데 이 둘의 결과 값은 각각 128bit(16byte), 160bit(10byte) 입니다. 그리고 이 값들을 16진수로 표현하면 md5는 32자리, sha1는 40자리가 나옵니다. 이 수치를 외워 두는 것은 중요합니다.

이번 문제에서는 160자인 것을 보니, 혹시 해시값을 이어붙인 것일 수도 있다고 추정됩니다.

이를 확인해 보기 위해서 웹사이트에 돌아와서 다른 문자를 입력해 봅니다.

a를 입력했더니 다음과 같이 로그인이 되며, 쿠키를 확인하면 base64 인코딩 된 값이 나옵니다.

image

image

해당 인코딩 값을 디코딩 한 결과는 다음과 같습니다.

image

그러면 a 값을 해시해 보고 해당 문자열과 같은지 비교를 해봅니다. 만약 같다면, ‘a’, ‘d’, ‘m’, ‘i’, ‘n’ 글자들을 md5해시 한다음 이어 붙이고, base64 인코딩을 해주면 문제가 풀릴 것입니다.

image

다행히 같습니다. 똑같이 5개 문자들을 전부 해시 값을 구하고 붙여줍니다.

   a : 0CC175B9C0F1B6A831C399E269772661
   d : 8277E0910D750195B448797616E091AD
   m : 6F8F57715090DA2632453988D9A1501B
   i : 865C0C0B4AB0E063E5CAA3387C1A8741
   n : 7B8B965AD4BCA0E41AB51DE7B31363A1

image

이제 인코딩 값을 쿠키에 넣어 줍니다.

image

???? 에러가 납니다

image

곰곰히 생각해보니, base64에서는 ascii 코드로 인코딩을 하며, 대소문자가 구분된다는 것이 생각나서 확인해 보니 역시 달랐습니다. 해시값으로 나온 문자들을 소문자로 변환한 뒤 입력해 줍니다.

image

바뀐 결과를 다시 입력해 주면 클리어

image

댓글남기기