Bazinga!

Cookie/Session 본문

Web

Cookie/Session

Bazinga! 2024. 8. 26. 20:47
쿠키(Cookie)

쿠키란 웹브라우저에 저장하는 데이터를 의미한다.

쿠키값을 이용해 사용자에 대하여 웹서비스에 접근할 수 있는 인증 정보(세션), 상태 정보들을 저장하는데 이용된다.

쿠키는 Key=Value 형태로 사용된다.

 

쿠키값은 개발자 도구 - 어플리케이션 - 왼쪽 또는 단축키 F12로 확인할 수 있다.

 

 

이용자(클라이언트)가 서버에다가 요청을 전송할 때마다 쿠키를 포함해서 전송한다.

서버에서는 쿠키값을 통해 이용자에 대해서 정보를 조회 식별하여 맞는 결과값을 출력해 준다.

 

※ 만약 이용자가가 서버에 전송한 값에 쿠키 값이 없다면?

서버 측에서 이용자의 쿠키를 생성(할당)하여 데이터를 전송해 준다.

 

  쿠키 값은 어떻게 탈취할까?

쿠키 값은 변조가 가능하여 공격자가 사용자 정보를 쿠키 값으로 입력을 하면 서버 측은 쿠키 값을 확인하고 그에 맞는 이용자 정보를 조회하여 그에 맞는 결과를 돌려주게 된다. 

쿠키값이 변조가 되었다면 이용자가 아닌 다른 사용자들의 정보를 조회할 수 있게 되는 것이다.

 

실습 1) 쿠키 값 변경하여 다른 이용자로 로그인 해보기

실습을 위해 제작된 화면으로 계정에 guest, guest1, guest2, admin이 있는 것을 미리 확인할 수 있다

임의로 admin계정으로 쿠키 값을 생성해 보았더니 로그인이 되는 것을 확인할 수 있다.

 

▶  이처럼 ① 쿠키 값이 변조 가능하고 ②서버가 쿠키 값에 맞는 이용자 정보를 돌려준다는 특징을 이용하여 다른 이용자의 계정에 쉽게 접근할 수 있다.

 

 

 


세션(Session)

이용자가 서버에 접근을 하면 웹 서비스는 접근 정보를 확인하여  이용자에게 세션 ID를 전달한다. 

해당 웹에서 나가기 전까지 해당 정보로  사용자의 정보가 유지가 된다.

즉, 세션은 서버에 저장되고 데이터에 접근할 수 있는 랜덤한 값을 생성 후 이용자에게 전송하는 것이다.

이용자는 웹 서비스를 이용할 때, 서버로부터 받은 세션 값을 이용해 인증 및 서비스 접근 권한을 받는 것이다.

 

쿠키 값의 변조를 못하도록 = 이용자들이 인증 정보를 변경할 수 없도록 세션을 사용한다.

(쿠키 값들은 암호화가 되어있지 않아 누구나 접근 가능하다.)

 

실습 2) 계정 입력을 통한 세션 확인 및 해당 세션으로 로그인해 보기

로그인되지 않은 초기화면

로그인하여 할당받은 세션 값을 복사

시크릿 모드 창으로 다시 접속하여 Value에 복사한 세션 값을 넣는다

▶  이처럼 세션 원문을 탈취할 경우 세션 변조를 이요한 요청 전송이 가능하게 되어 다른 이용자의 정보를 확인할 수 있다.

단,  세션 변조를 통해, 서버에 요청하여 임의 이용자의 정보를 탈취할 수는 없다.

 

 


Session Hijacking

공격자가 세션 값을 임의로 획득해, 해당 사용자처럼 행동할 수 있는 취약점이다.

웹 서비스에 로그인한 이용자의 세션 ID값을 탈취하여 로그인을 시도할 때 발생한다.

 

실습 3) 세션 탈취 취약점을 이용하여 관리자 세션으로 로그인해보기

기본화면

기본화면을 통해 이용자가 100명이라는 것을 확인할 수 있다.

이용자가 100명 이므로 세션값은 12300~12400까지 있다는 것을 생각할 수 있다.

새로고침을 하면 세션 값이 1씩 증가하는 것을 볼 수 있다.

 

계속해서 새로고침을 하다 보니 12333에서 관리자 계정으로 로그인되었다.

 

▶ 이처럼 유추 가능한 세션값을 사용하게 된다면 임의의 값을 계속해서 넣어보면서 다른 사용자 계정으로 접근을 할 수 있게 된다.

 


IDOR (단순 파라미터 변조 취약점)

Insecure Direct Object References 취약점

직접적으로 객체해 참조하여 서버에 저장된 정보에 접근 또는 조작할 수 있다.

 

이 취약점은 공격자가 직접적으로 객체를 참조할 수 있는 경우, 참조에 대한 인증/인가 절차가 불충분해 발생하게 된다.

 

<발생원인>

① 부적절한 접근 제어

② 직접 개체 참조

③ 예측 가능한 객체 ID

 

위와 같은 원인으로 민감 데이터 접근, 수정, 삭제 등의 행위가 모두 가능하다.

 

실습 4-1) 부적절한 접근 제어

관리자 계정으로 접속 가능 확인

▶ 이용자의 회원정보 조회에서 이용자에 대한 접근 제어가 미흡하여 취약점이 발생하였다.

 

실습 4-2) 게시글 조회 기능에서 이용자 검증 미흡으로 인한 취약점 (직접 개체 참조)

살펴보다 보니 15번 게시글이 없는 것을 발견

no= [번호] 인 것을 알 수 있다.

임의로 15번을 넣어 조회하니 관리가가 작성한 게시글을 조회할 수 있다.

▶ 게시글 조회 기능에서 이용자 검증 미흡으로 인해 발생한 취약점이다.

 

실습 4-3) 예측 가능한 객체 ID 취약점

 

게시글 23번이 없는 것을 발견하였다.

들어갈 수 없다는 것을 알 수 있다.

 

게시글을 들어가 보니 수정버튼을 한번 눌러 수정해 보았다.

수정 페이지 기능을 통해 게시글 내용을 볼 수 있게 된다.

▶ 게시글 조회 검증 미흡 취약점은 패치되었지만 게시글 수정 기능에서 이용자 검증 미흡으로 취약점이 발생하고 있다.

 

권한 설정이 많이 안되어 있어 위와 같은 취약점들이 발생하기 때문에 유의해야 한다는 것을 알 수 있다.

'Web' 카테고리의 다른 글

SQL Injection 실습해보기  (0) 2024.09.12
Cross Site Scripting취약점 (XSS)  (0) 2024.08.27
LFI / RFI 취약점 실습  (0) 2024.08.21
bWAPP 디렉토리 순회 & 인증결함 취약점  (0) 2024.08.21
bWAPP OS 명령 인젝션  (0) 2024.08.20