문제
- 쿠키로 인증 상태를 관리하는 로그인 서비스에 admin 계정으로 로그인에 성공하여 FLAG를 획득하는 문제이다.
핵심 - cookie의 이해
■ HTTP의 특징
- HTTP의 특징으로는 Connectionless(비 연결지향)과 Stateless(상태정보유지안함)이 있다.
Connectionless(비 연결지향) : 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성
(HTTP1.1에서 Connection 헤더에 keep-alive라고 설정하면 컨넥션을 유지할 수 있다.)
Stateless(상태정보유지안함) : HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없습니다. 이를 Stateless하다고 한다.
혹시 로그인을 하고 그 상태를 유지한 채로 웹 서비스를 제공하고싶다면 어떻게해야할까?
HTTP 프로토콜에서 상태를 유지하기 위해 쿠키와 세션이라는 방법이 존재한다.
■ 쿠키와 세션
쿠키 : 클라이언트 로컬에 저장되는 Key-Value쌍의 작은 데이터 파일
구성요소로는 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부가 있다.
세션 : 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술
■ 쿠키와 세션의 차이점
1. 저장위치
- 쿠키는 로컬에, 세션은 로컬과 서버에 저장된다.
2. 보안
- 쿠키는 탈취와 변조가 가능하지만, 세션은 ID값만 가지고 있고 서버에도 저장이 되어있기 때문에 상대적으로 안전하다.
3. Lifecycle
- 쿠키는 브라우저를 종료해도 파일로 남아있지만, 세션은 브라우저 종료시 세션을 삭제한다.
4. 속도
- 쿠키는 파일에서 읽기 때문에 상대적으로 빠르고, 세션은 요청마다 서버에서 처리를 해야하기 때문에 비교적 느리다.
따라서 개발자도구(F12)를 통해 cookie의 username을 admin으로 수정하면 FLAG 확인 할 수 있다.
( 크롬 플러그인인 EditThisCookie 혹은 쿠키값 변조 툴인 Cooxie toolbar를 사용하여도 된다. )
Reference
https://ko.javascript.info/cookie
'CHALLENGE > Dreamhack' 카테고리의 다른 글
[web] command-injection-1 (0) | 2023.12.19 |
---|---|
[web] phpreg (0) | 2023.12.14 |
[web] file-download-1 (0) | 2021.10.09 |
[misc] broken-png (0) | 2021.10.09 |