사이트 간 스크립팅(cross-site scripting, xss)은 웹 사이트 관리자가 아닌 사용자가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점을 이용한 공격을 뜻한다. 주로 여러 사용자가 볼수 있는 게시판에 악성 스크립트가 담긴 글을 올림으로서 공격이 이루어진다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 이 취약점을 통해 해커는 사용자의 정보(쿠키, 세션 등등)를 탈취하거나, 자동으로 비정상적인 기능을 수행할 수 있다. 주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 한다.
dom-xss 취약점은 응용 프로그램이 신뢰할 수 없는 소스의 데이터를 안전하지 않은 방식으로 처리하는 일부 클라이언트 측 자바스크립트를 포함할 때 발생하는 취약점이다. 예시로 응용 프로그램이 일부 자바스크립트를 사용하여 입력 필드에서 값을 읽고 HTML 내의 요소에 값을 넣을 때, 악의적인 사용자가 입력 필드의 값을 제어하여 손쉽게 악의적인 스크립트를 실행시킬 수 있다.
port swigger에 들어가, dom xssin document.write sink using source 문제로 들어간다.
lab에 들어가서 어떤 사이트인지 확인한 후, 검색창에 아무거나 입력해 본다.
devtool을 켜서, 내가 입력한 값이 html문서 어디에 삽입되었는지 살펴본다.
내가 입력한 값이 html 문서에 삽입된 것을 알 수 있다. 이로서 악성 스크립트를 검색창에 입력할 경우, 웹 페이지에서 악성 스크립트를 실행할 수 있다는 것을 알 수 있다.
악성 스크립트를 입력해 보자.
"><svg onload=alert(1)>
이렇게 경고창이 뜨면서, 문제가 해결되었다고 뜬다.
웹 페이지 구성 요소를 분석하고, html문서에 자바스크립트 문법을 이용한 악성 스크립트를 집어넣음으로서, 사이트가 dom xss공격에 취약함을 알 수 있었다.