찬이네사진관

#5 세션하이재킹 본문

IT World/Web Hacking

#5 세션하이재킹

Chanz_tudio 2019. 4. 28. 21:05
반응형

 

세션 하이재킹은 스니핑의 연장선상이다.

일단 이 공격을 하기 위해서는 세션에 대한 이해가 필요하다.

먼저 클라이언트는 서버에 접속할때는 HTTP 프로토콜을 사용한다. HTTP 프로토콜은 80번 포트를 사용하는 TCP 프로토콜로 신뢰성을 줄 수 있지만 이때 프로토콜은 3핸드쉐이킹이 성공하면 바로 연결을 끊는다. 즉 내가 티스토리에 접속을 하면 처음 3핸드쉐이킹으로 접속하여 티스토리 화면을 다 띄우고 접속을 끊어버린다.

위의 화면을 띄우고 나면 http 프로토콜은 접속을 끊어버린다.

그러면 만약 로그인 후에 글을 쓴다면 어떻게 될까. 연결을 끊어버렸는데? 글 다쓰고 완료 눌렀더니 다시 로그인하라는 참사가 생길 것이다. 그러기에 이러한 참사를 막기 위해 사용하는 것을 쿠키와 세션이라고 한다.

 

먼저 쿠키에 대해 설명 해보자. 쿠키는 로컬 즉 클라이언트에 저장되는 작은 데이터 파일이다. 쿠키에 저장 되는 것은 이름, 값, 만료시간(연결이 유지되는 시간), 경로 정보가 잇다. 즉 쿠키의 만료시간이 끝나기 전까지는 데이터를 저장하고 이를 로그인 상태 유지에 사용할 수 있다. 

즉 정리하자면

1. 내가 티스토리에 로그인하면 티스토리 서버에 http 프로토콜로 연결해 해당 웹페이지를 띄운다. 

2. 티스토리는 로그인 정보가 맞으면 해당 쿠키값을 제공하고 나는 쿠키값을 해당 웹사이트에 저장한다.

3. 내가 글을 다쓰고 완료를 눌러쓸때 완료에 대한 서비스를 요청하며 내 로그인 정보가 담긴 쿠키를 같이 준다.

4. 서버는 내가 로그인되었다고 생각하고 해당 글을 완료 하여준다.

   -> 이러한 방식으로 쿠키를 사용해 계속적으로 사용자는 재로그인 없이 로그인 한 것처럼 느끼게 만들어준다.

 

그러면 세션은 어떨까 세션도 쿠키와 비슷하게 로그인의 연장을 위해 존재한다. 하지만 쿠키랑 한가지 다른 점이 있다면 쿠키는 사용자의 컴퓨터에 정보를 저장하지만 세션은 그와 달리 서버에서 내용을 저장하는 것이다. 

즉 세션도 정리하자면

1. 내가 티스토리에 접속을 하면 티스토리 서버는 나의 로그인 정보를 저장하며 이에 연결된 세션 ID를 생성한다.

2. 티스토리 서버는 세션 ID를 나에게 준다.

3. 내가 글을 다쓰고 세션 아이디와 함께 서버에게 포스팅한 글을 넘겨준다.

4. 서버는 로그인된 저장 정보를 통해 글을 저장한다.

 

이러한 방식으로 로그인을 계속 한것처럼 느끼게 작동하는 것이 쿠키와 세션이다. 

이때 쿠키의 경우 로컬 컴퓨터에 저장되다보니 외부에 의해 변조될 위험이 있기에 서버에 저장되어 조금이라도 보안성이 더 높은 세션을 주로 많이 사용한다. 

 

그럼 세션 하이재킹은 무엇일까? 세션 하이재킹은 로그인할때 받는 세션 아이디를 탈취해 내가 그 세션을 같이 받는 것이다. 즉 공격자가 제 3자의 유효한 세션 아이디를 같이 보내면 서버는 공격자를 제 3자로 인식하며 로그인 된 정보를 그대로 출력해준다. 이를 세션 하이재킹이라 하며 세션만 얻는다면  아이디 비밀번호를 몰라도 로그인되는 것을 확인할 수 있다.

 

그럼 실습해보자. 일단 세대의 컴퓨터가 필요하다. 로그인할 고객, 서버, 그리고 공격자이다.

 

먼저 공격자는 스니핑을 통해 클라이언트가 로그인할때만을 기다린다. (와이어 샤크로  http 혹은 아이피주소로 필터링) 

** 무차별 공격이 아닌 특정 사이트만을 로그인하는 정보를 찾거나 특정 사람이 로그인 하는 것을 찾고 싶으면 아이피 필터링을 하자. 

 

 

 

이때 마지막부분에 보면 클라이언트 (130)에서 JCPARK로 로그인을 서버 (128)의 member_ok.asp에 로그인을 하였고(HTTP 프로토콜 사용) 그다음에 서버(128) 소스에서 클라이언트 (130)으로 OK 사인을 주었다는 것을 확인할 수 있다. 

 

이 부분을 HTTP Follow 창으로 상세보기를 하면 아래와 같이 볼 수 있다.

먼저 HTTP/1.1 프로토콜을 통해 OK 사인으로 마이크로 소프트 서버에 로그인했으며

아래 set-cookie 값으로 세션을 제공한다고 적혀있다. 이 세션의 값을 메모장에 저장한다.

ASPSESSIONIDSQTBQTBC=KONPAHMCDJMNHMLMAFLJLKJO

 

그리고 버프슈트를 사용해 웹프록시를 설정하고 트랩을 통해  해당 사이트로 접속할때 세션 아이디를 준다.

이때 버프슈트를 사용해 로그인할때도 Cookie를 넘기는 것을 볼 수 있는데

 

바로 이곳에 우리가 아까 스니핑한 쿠키값을 넣어 세션을 하이재킹한다.

위에 LONPAHMCOPGGOKCDGLIHOMJP의 값을 아까 스니핑한 KONPAHMCDJMNHMLMAFLJLKJO로 대치한다면 

아래와 같이 바꿀 수 있고 계속 포워드한다. (이때 무엇을 얻는지 봐야한다. 메인페이지인 main.asp를 얻을때만 바꾸어 주면 된다. (로그인된 페이지를 얻어 올 수 있다.) 그러면 아래와 같이 success 했다는 문구를 확인할 수 있다. 

 

 

그러면 xp에서 보이는 세션 id와 칼리에서 보이는 세션 id가 일치하는 것을 볼 수 있다. 

(위 사이트는 해킹 실습을 위한 사이트라 세션 아이디가 표시된다.) 

xp에서의 세션아이디.
칼리에서 받은 세션 아이디. 

 

하지만 세션 하이재킹은 계속해서 동일 세션을 제공해야한다. 안하면 바로 새로고침시 풀리는거 확인가능하다.

세션 하이재킹 풀림.

 

그러기에 계속적으로 세션을 바꾸어주며 페이지를 이동하거나 버프 슈트 옵션에서 세션을 지속적으로 바꾸어주는 옵션을 사용하면 해당 로그인이 계속 된 것처럼 사용할 수 있다.

반응형
Comments