2024 SWLUG/Dreamhack

1주차_CTF 문제풀이(1) - cookie

un_plugged 2024. 5. 22. 12:08

 

▶CTF란?

Capture The Flag. 주어진 시간 안에 보안 문제를 풀고 깃발(정답)을 찾아 득점하는 해킹대회이다. 보안 설정을 구성하고 시스템의 취약점을 찾아내며 해킹 및 포렌식 등 다양한 보안 주제에 대한 경쟁을 한다.

 

▶문제

▶문제 속 용어 정리

  • 쿠키: 사용자가 어떤 웹사이트를 방문할 때 해당 웹사이트에서 사용자의 브라우저에 저장되는 작은 데이터 파일

※브라우저: 네이버, 구글 등 사이트에 접속할 수 있는 도구

즉, 사이트가 사용하게 되는 일련의 작은 기록 파일이라고 할 수 있다. 해당 웹사이트를 방문할 때마다 인터넷 사용자의 정보를 수집하고 저장합니다.

→ 형태: key-value 형식의 문자열 형태로 저장

※key : value로 표현 ex) "Set-Cookie" : "id=user123"

웹사이트가 인터넷 사용자에 대한 정보를 기억하고, 인터넷 사용자가 웹사이트를 더욱 효율적으로 이용할 수 있도록 한다. 크게 아래 세가지로 쿠키의 역할을 나눌 수 있다.

① 세션관리 : 서버에 저장해야 할 데이터 관리

② 개인 맞춤 데이터 : 테마 등과 같은 세팅값

③ 트래킹 : 사용자의 행동을 기록 및 분석

→ 사용자의 웹사이트 방문 이력을 추적 등 보안에 취약점이 있다.

  • admin 계정: 관리자 계정. 일반 사용자에 비해 높은 권한을 가지고 있으며 시스템의 설정을 변경하거나 관리할 수 있는 권한을 가지고 있다.

  • DH{...}형식: 괄호 {} 안에 특정한 문자열이 들어가는 형태. 이 문자열은 CTF에서 특정한 챌린지나 문제를 해결한 결과물로, 해당 문제에 대한 정답이다.

ex) DH{this_is_the_flag} → 참가자는 "this_is_the_flag"를 찾아내야한다.

▶풀이

문제 속 웹사이트로 들어가니 로그인 할 수 있는 창이 있다. 이걸 admin 계정으로 로그인하라는 뜻 같다.

문제에서 주어진 파이썬 파일을 열어보았다. 어려운 코드들이 많지만 그 중 flag를 찾을 수 있는 부분에 집중해보았다.

이 부분이 눈에 띈다. user가 guest면 비밀번호 guest를 입력하여 guest로 로그인할 수 있다. 그리고 이 문제의 정답인 admin으로 로그인 하는 것이 flag이다.

user name: guest, password: guest로 로그인을 해보았다. 로그인은 되었지만 admin이 아니라는 문구가 뜬다.

이 사이트의 로그인 상태는 쿠키로 관리하기 때문에 쿠키를 확인해본다.

※쿠키 확인하는 법

① 키보드의 f12 버튼을 눌러 개발자 모드로 실행

② 더보기(<<)를 누른 후 Application 선택

③ cookies 선택

쿠키를 들어가 확인하니 value값이 guest이다. admin 계정으로 로그인 해야하므로 value를 admin으로 바꾸어 준 후 새로고침을 한다.

admin 계정으로 로그인에 성공하였다!

▶코드 해석

flask로 구성된 웹페이지다. 여기서 flask는 파이썬 기반의 웹 프레임워크 중 하나이다. 즉, 파이썬으로도 웹 서버를 만들 수 있다.

루트 페이지(/)에 접속하면 username이라는 쿠키의 값을 가져온다. username이 있는 경우 Hello, username이 출력되고 username이 admin인 경우 FLAG가 출력된다.

→ 사용자가 /login(로그인 페이지)에 접속하면 GET 요청일 때는 로그인 페이지를 보여주고, POST 요청일 때는 사용자가 제출한 아이디와 비밀번호를 확인하여 로그인을 처리한다.

→ 올바른 아이디와 비밀번호를 입력한 경우에는 사용자의 아이디를 쿠키에 저장하고, 사용자를 홈페이지로 리디렉션한다.

→ 만약 아이디가 users 딕셔너리에 없다면 "not found user" 경고창을 띄우고 이전 페이지로 이동한다.

→ 입력한 비밀번호가 올바르지 않으면 "wrong password" 경고창을 띄우고 이전 페이지로 이동한다.