[WebGoat] (A1)-4. Spoofing an Authentication Cookie

신지훈·2025년 6월 2일

WebGoat(웹 해킹)

목록 보기
4/8
post-thumbnail

먼저 Spoofing은 다른 사람이나 시스템인 것처럼 위장하여 상대방을 속이는 기술로 이번장에서는 사용자 인증과 연관되어 있으며 접근 제어를 위해 생성한 타 사용자의 쿠키값을 유추하는 것을 의미한다. 로그인 한 사용자는 세션 또는 accessToken을 사용한다는 점에서 Hijack a session과 결이 비슷하다. 접근 제어를 위한 토큰이 누구나 유추할 수 있는 알고리즘이라면 어떤 취약점이 발생하는지 살펴보자.

2. 모의 해킹

먼저 주어진 webgoat, admin아이디로 각각 로그인을 해보면 아래와 같은 토큰을 받을 수 있다.

이때 받은 토큰은 알파벳 대소문자로 이루어 졌다는 점에서 Base64 encoding으로 이뤄어져 있음을 유추할 수 있다. 그럼 brup suite의 Decoder 탭에서 디코딩을 다음과 같이 진행해보자.

Base64로 디코딩 한 값이 16진수로 이주어 졌다는 점에서 추가로 ASCII 문자로 디코딩 해보면 다음과 같은 문자를 얻을 수 있다.

webgoat와 admin둘다 같은 과정으로 문자를 얻어보면 TjccnVbIKntaogbew,
TjccnVbIKnnimdaTjccnVbIKn문자 뒤에 아이디가 역순으로 작성되어 있는 것을 확인할 수 있다.

그럼 우리는 Tom의 spoof_auth의 디코딩 된 값도 TjccnVbIKn뒤에 tom의 역순인 mot가 붙어 TjccnVbIKnmot 라는 것을 유추할 수 있다.

그럼 우린 다음과 같이 유추한 문자를 ASCII인코딩, Base64 인코딩을 거친다면 tom의 spoof_quth값을 얻을 수 있다.

이렇게 알아내 Tom의 spoof_auth값을 쿠키에 넣어 요청을 함으로써 미션을 완료할 수 있다. 이것 역시 Reapter를 사용해도 되지만 Proxy탭의 Intercept에서 다음과 같이 Intercept기능을 활용해보자.

먼저 Intercept를 on으로 한 후 로그인 요청을 해보자. 그럼 2번과같이 로그인한 요청에 intercept해올 수 있다. 이 요청을 3번과 같이 spoof_auth를 넣고 forward한후 다시 Intercept기능을 끄면 성공 메세지를 확인할 수 있다.

3. 정리

이 처럼 access토큰을 유추할 수 있는 값으로 만든다면 쉽게 탈취될 가능성이 있기에 access토큰은 유추할 수 없는 영문자와 숫자를 섞어 난수 형태로 최소 12바이트 이상으로 만들어야 한다고 한다.

profile
주주주주니어 개발자

0개의 댓글