본문 바로가기

DreamHack

cookie

https://dreamhack.io/wargame/challenges/6

 

cookie

쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. 플래그 형식은 DH{...} 입니다. Reference Introduction of Webhacking

dreamhack.io

 

 

 

개요

 

사용자를 인증하기 위해 사용하는 쿠키를 변조하여, 공격자가 admin 인 것처럼 웹사이트를 기만하는 것이 목적이다.

 

 

그림 1. 쿠키를 보는 모습

 

 

쿠키는 (Chrome 기준) 브라우저의 개발자 도구의 "Application" 메뉴에서 볼 수 있다.

 

 

 

 

취약점 분석

 

 

그림 2. guest, admin의 사용자 정보

 

 

 

소스코드를 살펴보면, admin의 비밀번호가 Flag임을 알 수 있다.

 

 

하지만 여기서 admin의 비밀번호 그 자체를 알아내기에는 현실적으로 곤란하다.

 

 

 

그림 3. 로그인 페이지의 소스코드

 

 

 

 

로그인 페이지는 사용자의 username과 비밀번호를 받아오고, 로그인을 허용할 지 판별한다.

 

 

로그인에 성공할 경우, "set_cookie"를 통해 사용자의 쿠키를 설정하는 역할을 한다.

 

 

 

그림 4. username 만 이용해서 사용자를 인식하는 코드

 

 

 

로그인에 성공하면, 저장된 쿠키를 이용하여 사용자를 식별한다.

 

 

단, username 별 cookie를 검증하지 않는다는 허점이 있다.

 

 

 

 

예를 들어, 공격자가 guest로 로그인 하고 username 만 admin으로 바꾸는 경우를 생각해보자.

 

 

웹페이지는 공격자가 사용하는 쿠키가 admin의 것인지 검증하지 않으므로, 공격자는 admin의 비밀번호를 파악하지 않고도 admin으로서 로그인 할 수 있다.

 

 

 

 

Exploit

 

주어진 웹사이트는 사용자별 쿠키를 검증하지 않으므로, cookie에 저장된 username 만 "guest" 에서 "admin"으로 바꾸면, admin의 세션을 탈취하고 Flag도 얻을 수 있다.

 

 

그림 5. guest로 로그인

 

 

 

우선 guest로서 로그인 한다.

 

 

 

그림 6. 개발자 도구의 위치

 

 

 

마우스 우클릭을 하면 나오는 "검사" 메뉴에 들어가면, 개발자 도구를 사용할 수 있다.

 

 

 

그림 7. 개발자 도구의 모습

 

 

 

개발자 도구에 들어온 상태에서 "Application"으로 이동한다.

 

 

그림 8. 쿠키의 모습

 

 

 

 "Cookies" 라고 쓰여있는 칸을 통해, 주어진 웹사이트에서 사용하는 쿠키를 볼 수 있다.

 

 

 

그림 9. username을 admin으로 변경한 모습

 

 

 

"username"에서 Value 만 "guest" 에서 "admin"으로 변경하고, 웹사이트를 새로고침 한다.

 

 

 

그림 10. Flag를 획득한 모습

 

 

 

그러면 admin으로 로그인 할 수 있으며, 이 문제의 Flag도 얻을 수 있다.

 

 

 

 

'DreamHack' 카테고리의 다른 글

Return Address Overwrite  (0) 2024.04.09
XSS-1  (0) 2024.02.05
Switching Command  (1) 2024.01.25
simple_sqli_chatgpt  (0) 2023.09.19
PHPreg  (1) 2023.09.17