본문 바로가기

Webhacking/WebGoat

[WebGoat] Broken Access Control-Spoofing an Authentication Cookie 풀이

728x90
반응형

이번 챕터는 authentication 즉 사용자 인증에 사용되는 쿠키 관련한 내용이다. 
그 중에서도 이제 인증정보가 담긴 쿠키가 어떤 알고리즘을 이용하여 생성되는지를 추측할 수 있다면, 타 사용자의 쿠키값을 유추해내, 그 사용자로 로그인할 수 있다는 내용을 담고있다.

그럼 관련 문제를 풀러가자

이번 문제는 로그인을 해볼 수 있는 계정 2개(webgoat, admin)에 대한 정보를 주고, 인증 쿠키가 생성되는 알고리즘을 알아내서 Tom으로 로그인하는 것이 목표이다.

우선은 로그인을 하고 돌아오는 응답 패킷을 보자.

webgoat로 로그인을 했더니, spoof_auth라는 쿠키값에 인증정보를 담아서 주었다는 내용을 확인할 수 있다. 
==으로 끝나는 모양새가 base64 인코딩을 의심하게 하게 만든다. base64 디코딩을 시도해보자.

디코딩한 결과 75735655714d5243675574616f67626577 라는 값이 도출되었다. 
이 값은 생긴게... 최대 e를 넘어가지 않는것이 hex 인코딩을 의심하게 만든다. 그렇다면 hex 디코딩을 이어서 시도해보자

usVUqMRCgUtaogbew 이라는 값이 나왔다.
음 일단 맨뒤에 Id인 webgoat를 거꾸로 넣어서 생성한 것이 눈에 띄이고, 그 앞 문자열은 잘 모르겠다...
이어서 admin 계정으로 로그인해보자.

이번에 나온 데이터 역시 base64 디코딩 후 hex 디코딩 해보자.

디코딩 결과는 usVUqMRCgUnimda 라는 값이었다.
아까 webgoat로 로그인했을때와 앞 부분(usVUqMRCgU)이 동일하다는 것을 통해 해당 부분은 고정값이라는 것을 유추할 수 있다. 또 뒷부분은 webgoat때와 마찬가지로 Id인 admin을 거꾸로 나열해두었다는 것을 알 수 있다.

그렇다면 tom이라는 계정으로 로그인을 하고싶다면..?
동일한 앞부분 'usVUqMRCgU'에 tom을 거구로한 'mot'를 이어붙여 'usVUqMRCgUmot'를 hex 인코딩한 뒤 이를 다시 base64 인코딩하면 된다.

그 값은 'NzU3MzU2NTU3MTRkNTI0MzY3NTU2ZDZmNzQ=' 이다.
자 이제 해당 값을 spoof_auth 쿠키값에 넣어, Access를 시도해보자.


이렇게 문제가 해결됨을 알 수 있다.

이번 챕터는 따로 코드 수정을 통해 조치를 해볼 필요는 없다.
인증관련 값을 쿠키에 전달할때, 그 값은 유추할 수 없는 값이어야하고, 그 알고리즘 역시 유추할 수 없어야만 한다. 
이 점을 고려하여 값을 생성하도록 하자.


728x90
반응형