HTTP 프로토콜의 특징 때문에 웹 서버는 클라이언트를 기억할 수 없습니다.
|
Cookie와 Session의 용도
- 웹 서버는 수많은 클라이언트와 HTTP 프로토콜을 사용해 통신하는데, 각각 다른 클라이언트를 구별하기 위해 클라이언트의 인증 정보가 필요하다.
- 손님 계정으로 로그인 했다면 손님이 이용할 수 있는 서비스를 제공하고, 관리자 계정으로 로그인 했다면 데이터베이스, 회원 관리 등의 관리자 페이지를 제공해야 합니다.
쿠키
- Key와 Value로 이루어짐
- 서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 같이 전송합니다.
- 서버는 클라이언트의 요청에 포함된 쿠키를 확인해 클라이언트를 구분할 수 있습니다.
쿠키 변조
쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는 정보.
악의적인 클라이언트는 쿠키 정보를 변조해 서버에 요청을 보낼 수 있습니다.
세션
- 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 사용
- 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키인 Session ID(유추할 수 없는 랜덤한 문자열)를 만들어 클라이언트에 전달하는 방식
- 브라우저는 Session ID를 쿠키에 저장하고 이후에 HTTP 요청을 보낼 때 사용합니다.
- 서버는 Session ID에 해당하는 데이터를 가져와 인증 상태를 확인합니다.
세션 하이재킹 (Session Hijacking)
타 이용자의 쿠키를 훔쳐 인증 정보를 획득하는 공격
연습1. 크롬 Console 활용하여 쿠키 확인
쿠키는 클라이언트에 저장되기 때문에 클라이언트는 저장된 쿠키를 조회, 수정, 추가할 수 있습니다.
document.cookie를 입력하면 쿠키 정보를 확인할 수 있습니다.
연습2. 세션 하이재킹 - 로그인
- 드림핵 로그인 페이지에서 우클릭 후 검사를 클릭하고 Network 탭을 누릅니다. Preserve log를 체크하고 로그인을 하면 로그인 성공 시 응답을 볼 수 있습니다. 응답을 살펴보면, 서버에서 set-cookie 헤더를 통해 브라우저의 쿠키에 세션 정보를 저장하는 것을 볼 수 있습니다.
- 크롬 검사에서 Application을 누르고 Cookies 목록 안의 https://dreamhack.io 를 누르면 서버의 set-cookie 헤더를 통해 설정된 쿠키를 확인할 수 있습니다.
- sessionid 헤더의 값을 메모장에 복사합니다. 이후 사진과 같이 sessionid 헤더의 값을 우클릭한 후 Delete를 클릭하면 브라우저의 쿠키에 저장된 세션 값이 삭제됩니다. 세션 값을 삭제하고 드림핵 페이지를 새로고침하면 로그인이 풀려있는 것을 확인할 수 있습니다.
- 쿠키의 빈 칸을 더블 클릭해 sessionid 헤더를 추가하고, 이전에 복사한 세션 값을 입력하면 브라우저의 쿠키에 세션 값이 설정됩니다. 세션 값을 설정하고 드림핵 페이지를 새로고침하면 로그인이 되는 것을 확인할 수 있습니다.
키워드 정리
- 쿠키 (Cookie): HTTP에서 상태를 유지하기 위해 사용하는 Key-Value 형태의 값
- 세션 (Session): 쿠키에 포함된 Session ID를 사용해 서버에 저장된 세션 데이터에 접근하는 방식
- 세션 하이재킹 (Session Hijacking): 타 이용자의 쿠키를 훔쳐 인증 정보를 획득하는 공격
관련 문제
https://dreamhack.io/lecture/courses/176
Exercise: Cookie
cookie를 함께 풀어봅니다.
dreamhack.io
'KERT > HackHeat' 카테고리의 다른 글
NoSQL 개념과 MongoDB 기본 문법 (0) | 2023.07.26 |
---|---|
SQL Injection (0) | 2023.07.21 |
DBMS (0) | 2023.07.21 |
ClientSide: XSS (0) | 2023.07.16 |
웹 기초 상식 (HTTP, 웹 브라우저, 개발자 도구) (0) | 2023.07.02 |