문제
페이지 소스코드

평범한 코드이다.

제출 클릭 시

you are not admin이라는 문자열이 뜨고 몇 초 후에 다시 메인 페이지로 돌아간다.

 

guest로 제출

guest를 입력해줬더니 hello guest라는 문자열이 보인다.

 

1234로 제출

 

제출한 값 그대로 나온다.

admin을 제외하고는 모두 이렇게 뜨는 것 같다.

 

하지만, logout을 눌러도 페이지에 변화가 없고,, 주소창도 그대로여서 쿠키를 확인해봤다. 

일반적으로 사용하는 PHPSESSID 말고 userid라는 쿠키가 있다.

 

들어있는 값을 URL 디코더로 돌린 후 %3D=를 의미한다는 것을 알았다.

어떠한 난독화된 값이 =로 끝난다면 이는 base64 로 인코딩된 것일 확률이 높다고 한다.

 

따라서 이것을 base64 방식으로 디코딩하려 했으나 오류만 나고,, 알 수 없는 문자열이 가득.. 

그래서 다시 처음부터 시작

 


 

id에 0을 입력

0을 입력했을 때는 URL 주소가 정상적으로 나타나지만 메인 페이지에 머물러 있다.

따라서 1을 입력해봤다.

 

id에 1을 입력
쿠키값 확인

비교적 짧은 쿠키값이 나왔다. 

이 또한 %3D로 끝난다. base64 방식으로 인코딩 된 것 같아서 base64 방식으로 디코딩해보았다.

 

base64로 디코딩

 

암호 알고리즘 별 해쉬값의 길이를 보니 (https://m.blog.naver.com/PostView.naver?blogId=thescream&logNo=220210025548&proxyReferer=https:%2F%2Fwww.google.com%2F)

 

32자리라면 MD5 해시값이라고 한다.

 

따라서 1을 MD5로 암호화해줬더니 

1을 MD5 방식으로 암호화한 결과

 


 

id에 11을 입력했을 떄의 쿠키값
이 쿠키값을 base64 방식으로 디코딩 한 결과

디코딩 한 결과, 앞서 봤던 1의 결과가 두번 연속으로 나타나는 것을 알 수 있다.

 

 

따라서 이 문제에선 입력한 문자열을 각각 MD5방식으로 암호화한 후, 

전체적으로 base64방식으로 또 한번 암호화하고 있다는 것을 알게되었다.

 

따라서 문제를 해결하려면

① admin 각 문자열에 대해 MD5로 암호화

② 합쳐서 base64로 암호화

③ 쿠키값에 이를 입력

하는 것이 좋겠다.

 

a → 0cc175b9c0f1b6a831c399e269772661

d → 8277e0910d750195b448797616e091ad 

m → 6f8f57715090da2632453988d9a1501b

i → 865c0c0b4ab0e063e5caa3387c1a8741

n →7b8b965ad4bca0e41ab51de7b31363a1

 

base64로 인코딩한 결과

 

이를 쿠키값에 입력할 때 주의할 점!
마지막 =는 %3D로 적어줄 것!!

 

해결~

 

+ Recent posts