이번 챕터는 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를 시도해보자.
이렇게 문제가 해결됨을 알 수 있다.
이번 챕터는 따로 코드 수정을 통해 조치를 해볼 필요는 없다.
인증관련 값을 쿠키에 전달할때, 그 값은 유추할 수 없는 값이어야하고, 그 알고리즘 역시 유추할 수 없어야만 한다.
이 점을 고려하여 값을 생성하도록 하자.
'Webhacking > WebGoat' 카테고리의 다른 글
[WebGoat] Injection-SQL Injection (advanced) 풀이 (1) | 2023.01.24 |
---|---|
[WebGoat] Injection-SQL Injection (intro) 풀이 (0) | 2023.01.24 |
[WebGoat] Broken Access Control-Missing Function Level Access Control 풀이 (0) | 2023.01.22 |
[WebGoat] Broken Access Control-Insecure Direct Object References 풀이 (0) | 2023.01.22 |
[WebGoat] Broken Access Control-Hijack a session 풀이 (0) | 2023.01.21 |