본문 바로가기
Web Hacking

6. Session Hijacking(세션 관리 및 탈취)

by 귀멸 2022. 6. 20.

Session 네트워크 시간에도 이 단어를 배운적이 있다. 연결을 계속 유지한다는 개념이다.

HTTP는 TCP 기반의 프로토콜임에도 Stateless 방식

(client 요청에 따른 server 응답이 완료되면 session이 끊어짐)이다.

하지만 사용자 편의 등의 이유로 연결을 일정 시간동안 유지시키는 쪽의 기능이 생겨났다.

이러한 Session은 인증(세션 토큰)을 기반으로 작동하고 쿠키가 이를 저장한다.

쿠키의 저장된 세션 토큰을 탈취 할 수 있다면,

탈취한 토큰으로 서버로 하여금 공격자를 사용자로 인식할 수 있게 만들 수 있다. 

 

0. Session management

  # Session Token
  세션을 인증하기 위한 정보
  인증에 관련된 정보는 서버와 클라이언트 양쪽에 저장되어야 함

  # WAS에서 지원하는 세션 토큰
    ASP : ASPSESSIONID
    JSP : JSESSIONID
    PHP : PHPSESSIONID
   

  세션 토큰 저장 방식 → Cookie
  일반적인 Session Management 절차


1. Session hijacking
  Step1. 공격자가 클라이언트와 서버간의 패킷 전송을 sniffing
           - 같은 네트워크의 상황을 만들어야 sniffing이 가능하다 

              ; switch - 목적지가 지정됨 : 특별한 방법을 사용해야 sniffing이 가능함

                           - GNS를 써서 가상머신 연동해야 가능
              ; hub     - 목적지가 지정되어 있지 않음 : 같은 네트워크에 있는 것 만으로 sniffing이 가능함

                           - 현재 VMware 상의 상황 

           - 같은 네크워크 상황으로 침투하기 위해 다양한 방법을 고안한다.

           - 혹은 내가 서버를 열어놓고 피해자가 오게끔 한다(reverse).
   Step2. sniffing을 통해 사용자의 쿠키에서 토큰을 탈취

   Step3. 공격자는 서버로 request 시 탈취한 세션 토큰을 이용해 로그인

 

2. Hub 환경 VMware 내의 Session Hijacking 실습

    Step1. 공격자에서 paros 및 wireshark 준비 후 client에서 server로 페이지 요청
    Step2. 공격자에 wireshark에서 client가 서버로 부터 받은 쿠키와 세션 토큰 확인

                Cookie: ASPSESSIONIDQCSCBAAC=CGJLCAACCJLPFCIDIHHAIJHP

 

    Step3. client는 서버 페이지에 로그인

    Step4. 공격자에서 서버 페이지에 접속 하면서 paros로 request를 잡아두고 패킷마다 탈취한 쿠키 값 입력

    Step5. client와 동일한 로그인이 공격자에서 접속 성공

 

     id / pw 정보도 sniffing으로  post로 요청하는 패킷에서 모두 얻을 수 있음

 

3. Switch 환경에서 Session Hijacking

 

VMware는 기본적으로 hub로 구성되어 있어 
공격자가 클라이언트와 서버의 통신 내용을 볼 수 있었다.
그러나 실제 환경에서 switch가 많이 사용되고 있음 (가격인하로 hub 대체)
이 구성을 확인해보려면 GNS3를 이용하여 VMware와 연동하여 switch로 토폴로지를 구성하여 확인한다.

GNS와 VMware 연동
  Step1. GNS3 토폴로지 구성 (switch와 두 대 PC, 한 대 Server)
  Step2. VMware 네트워크 인터페이스 추가 3개의 host-only 인터페이스 확보 DHCP 옵션 해제
  Step3. GNS3로 돌아가서 각각의 client, server, attacker의 configuration으로 네트워크 인터페이스 지정
  Step4. VMware에서 각각의 client, server, attacker의 NAT를 각각의 해당 네트워크 인터페이스로 지정
  Step5. GNS3에서 client, server, attacker를 switch와 연결하여 토폴로지완성 
             (이 과정에서 선이 연결이 안되는 경우는 재부팅하면 해결 됨)
   Step6. GNS3와 VMware 연동이 완료된 것을 확인하고 VMware에서 Ping Test 시도 성공

스위치에서는 Attacker에서 클라이언트와 서버간의 통신 확인 불가

arp spoofing을 통해 클라이언트가 스위치에 전달한 패킷을 서버에게 전달하기 전에 

공격자가 먼저 받고 다시 서버로 전달되게한다

arp -a 최근 통신한 ip주소들에 매칭되는 맥주소 확인하는 명령어
192.168.1.20  00-0c-29-d6-24-44
192.168.1.30  00-0c-29-87-08-6c

클라이언트에게 서버 192.168.1.20의 맥주소를 공격자의 맥주소로 인식하게 만든다.
스위치는 포트와 맥주소를 맵핑해서 저장하고 있기때문에 클라이언트만 속이면 
공격자의 맥주소로 패킷을 보내게 된다.

결론은 그렇다면 클라이언트에게 어떻게 서버의 IP와 MAC주소 중에 MAC주소만을 

공격자의 MAC주소로 인식할 수 있게 조작할 수 있을까?


[실습 1] Switch 환경에서 Session Hijacking을 시도하세요.

공격자에서 클라이언트에게 arp spoofing을 하도록 만드는 툴 이용
Step1. 클라이언트가 서버의 IP로 보낸 패킷을 공격자 MAC주소로 인식하게 만든다.
arpspoof -h
Version: 2.4
Usage: arpspoof [-i interface] [-t target] host
root@bt:~# 
root@bt:~# arpspoof -t 192.168.1.10 192.168.1.20

클라이언트에서 cmd로 arp -a로 확인해보면
Interface: 192.168.1.10 --- 0x2
  Internet Address      Physical Address      Type
  192.168.1.20          00-0c-29-87-08-6c     dynamic
  192.168.1.30          00-0c-29-87-08-6c     dynamic

Step2. 포워딩을 시켜줘서 클라이언트로부터 받은 패킷을 서버에게 넘겨준다.
root@bt:~# fragrouter -B1
fragrouter: base-1: normal IP forwarding

이걸 걸어줘야 공격자에게 온 패킷을 서버로 계속 넘겨주어 클라이언트가 웹페이지에 접속하는 것도 
자연스럽게 진행된다.

Step3. 클라이언트는 서버 웹페이지로 접속하고 로그인한다.

Step4. 공격자에서 wireshark로 클라이언트의 쿠키를 훔쳐낸다.
Cookie: ASPSESSIONIDQSTCQCSD=LJANKBLANCHLGINKHFKCBLIA

Step5. 훔친 쿠키를 가지고 paros로 request Trap을 걸고 
보내는 쿠키를 훔쳐낸 쿠키로 변조하여 요청하면 클라이언트의 로그인된 페이지를 획득


[실습 2] 탈취한 Session 값을 수동으로 변경하지 않고 자동으로 변경될 수 있게 하세요.

tools - Filter 를 걸어서
request header 체크 아래와 같이 필터링
 
Cookie:*
Cookie: ASPSESSIONIDQSTCQCSD=LJANKBLANCHLGINKHFKCBLIA


4. Session Token 저장방식
  - HTML 페이지에 저장하는 방식
     ; 특수한 목적을 제외하고 거의 사용하지 않는다. (우클릭 페이지 소스보기로 다 볼 수 있기 때문에)
     ; HTML의 Hidden field에 저장

  - URL Rewriting
     ; 거의 사용하지 않는다.

  - Cookie에 저장하는 방식
     ; Session Cookie(클라이언트 일반적), Persistant Cookie(서버측) 저장하는 위치에 따라

  - Javascript를 이용한 Cookie 확인
    javascript:document.cookie 구문을 웹주소창에 넣어주면
    Cookie 값을 확인 할 수 있다.

'Web Hacking' 카테고리의 다른 글

8. bruteforce attack / password cracking  (0) 2022.06.24
7. 웹 취약점 리스트 OWASP 2021  (0) 2022.06.22
5. Web Authentication(웹 인증)  (1) 2022.06.15
4. Encoding Schema  (1) 2022.06.15
3. HTML GET/POST method 차이 패킷 분석  (1) 2022.06.14

댓글