EYEN

[드림핵 웹 해킹] STAGE 3: COOKIE&SESSION 본문

Wargame/Web

[드림핵 웹 해킹] STAGE 3: COOKIE&SESSION

EYEN 2022. 10. 31. 10:41

웹 서버가 수많은 클라이언트를 구별해서 서로 다른 결과를 반환해주는 방법

헤더를 통해 웹서버에게 요청을 보내서 결과값을 반환 받을 때 헤더에 클라이언트의 인증정보를 포함할 수 있다.

#1 Cookie

클라이언트의 IP주소와 User-Agent는 매번 변경될 수 있는 고유하지 않은 정보일 뿐만 아니라 ,http 프로토콜의 connectionless와 Stateless 특징 때문에 웹서버는 클라이언트를 기억할 수 없다.

connectionless: 하나의 요청에 하나의 응답을 한 후 연결을 종료하는 것을 의미

특정요청에 대한 연결은 이후의 요청과 이어지지 않고 요청마다 새로운 연결을 맺는다

stateless: 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미. 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없다.

이 두 가지 특성을 갖는 http에서 상태를 유지하기 위해 쿠키가 필요하다.

  1. 쿠키의 요소

key와 value로 이뤄져있다.

정보 기록: 쿠키에 팝업 창 옵션을 기록해 표시 여부를 판단

상태 정보: 로그인 상태와 이용자를 구별하기 위한 값을 쿠키에 저장해 사용한다.

2)쿠키의 사용방법

클라이언트가 서버에 요청을 보낼 때마다 쿠키를 포함하고 서버도 응답을 보낼 때 특정 쿠키를 포함해 보내면 그 다음에 클라이언트가 서버에 요청을 보낼 때 계속 쿠키를 포함해 보낸다.

→ 이때 쿠키를 클라이언트 측에서 보내기 때문에 서버가 검증하지 않는다면 쿠키 정보를 사칭해 정보를 탈취할 수 있다.

#2. Session

쿠키에 인증상태를 저장하면서 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 세션을 사용한다. 세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열)을 만들어 클라이언트에 전달한다. 해당 키를 일반적으로 Session ID라고 한다. 브라우저는 해당 키를 쿠키에 저장하고 이후에 http요청을 보낼 때 사용한다. 서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인한다.

쿠키는 데이터 자체를 이용자가 저장하며 세션은 서버가 저장한다.

쿠키는 서버와 클라이언트 둘 다 설정할 수 있다.

서버에서 설정하는법: http응답 중 헤더에 쿠키 설정 헤더를 추가하면 클라이언트의 브라우저가 쿠키를 설정한다.

클라이언트에서 설정하는 법: 자바스크립트를 이용한다.

공격자가 이용자의 쿠키를 훔칠 수 있으면 세션을 훔칠 수 있고, 이를 세션 하이재킹이라고 한다.

쿠키는 이용자측에 저장된 인증정보이고,

쿠키를 알아도 세션을 모른다면 서버 측의 데이터에는 접근할 수 없다…? 이거 맞아?어 맞아

인증 정보를 서버에 저장한 다음 아무나 접근할 수 없도록 해당 데이터에 접근할 수 있는 키를 포함하여 클라이언트에 전달하는데 이를 세션 키라고 한다.