https://dreamhack.io/wargame/challenges/6
cookie
쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. 플래그 형식은 DH{...} 입니다. Reference Introduction of Webhacking
dreamhack.io
개요
사용자를 인증하기 위해 사용하는 쿠키를 변조하여, 공격자가 admin 인 것처럼 웹사이트를 기만하는 것이 목적이다.
쿠키는 (Chrome 기준) 브라우저의 개발자 도구의 "Application" 메뉴에서 볼 수 있다.
취약점 분석
소스코드를 살펴보면, admin의 비밀번호가 Flag임을 알 수 있다.
하지만 여기서 admin의 비밀번호 그 자체를 알아내기에는 현실적으로 곤란하다.
로그인 페이지는 사용자의 username과 비밀번호를 받아오고, 로그인을 허용할 지 판별한다.
로그인에 성공할 경우, "set_cookie"를 통해 사용자의 쿠키를 설정하는 역할을 한다.
로그인에 성공하면, 저장된 쿠키를 이용하여 사용자를 식별한다.
단, username 별 cookie를 검증하지 않는다는 허점이 있다.
예를 들어, 공격자가 guest로 로그인 하고 username 만 admin으로 바꾸는 경우를 생각해보자.
웹페이지는 공격자가 사용하는 쿠키가 admin의 것인지 검증하지 않으므로, 공격자는 admin의 비밀번호를 파악하지 않고도 admin으로서 로그인 할 수 있다.
Exploit
주어진 웹사이트는 사용자별 쿠키를 검증하지 않으므로, cookie에 저장된 username 만 "guest" 에서 "admin"으로 바꾸면, admin의 세션을 탈취하고 Flag도 얻을 수 있다.
우선 guest로서 로그인 한다.
마우스 우클릭을 하면 나오는 "검사" 메뉴에 들어가면, 개발자 도구를 사용할 수 있다.
개발자 도구에 들어온 상태에서 "Application"으로 이동한다.
"Cookies" 라고 쓰여있는 칸을 통해, 주어진 웹사이트에서 사용하는 쿠키를 볼 수 있다.
"username"에서 Value 만 "guest" 에서 "admin"으로 변경하고, 웹사이트를 새로고침 한다.
그러면 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 |