❓ XSS란?
XSS는 Cross Site Script의 줄임말로, 클라이언트 측, 즉 사용자의 브라우저에서 악성 스크립트가 실행되도록 하는 공격입니다
서버에 스크립트를 저장시킨 뒤, 클라이언트가 해당 스크립트가 저장된 곳을 요청하면 서버에 저장된 악성 스크립트가 함께 전달되어 클라이언트의 브라우저에서 실행되도록 만드는 XSS 공격
예를 들어, 게시판과 같이 데이터를 저장(INSERT) 시키고 출력하는 곳에 악성스크립트를 저장시켜, 클라이언트가 게시글을 클릭하면 저장되어있던 악성스크립트가 실행되어 공격이 이루어지도록 한다
1. 작성한 데이터가 화면에 응답되는 것 확인
우선 XSS를 위해서는 스크립트가 저장되고, 그 저장된 스크립트가 응답에 포함되어 클라이언트의 브라우저에서 실행될 수 있어야 하기 때문에
작성한 데이터가 응답되는 부분을 확인해야 합니다
2. 특수문자 체크
스크립트 삽입은 <script> 스크립트 내용 </script>
과 같이 합니다
이 때, <
, '
, "
, >
이 4개의 특수문자가 주로 필요한데, 이 특수문자들이 필터링 되는 등 사용할 수 없는 상태가 아닌지 확인합니다
3. script 삽입
스크립트를 삽입할 수 있는 곳이라는 것이 확인되면, 이제 정말 script 삽입을 진행할 차례입니다
실제 공격에서는 악성 스크립트를 삽입하겠지만, 모의해킹에서는 어떤 스크립트를 삽입해 XSS 취약점이 있다는 것을 증명할까요?
XSS 취약점을 증명할 수 있는 POC(Proof of Concept) 코드에는 alert
, prompt
, confirm
등과 같은 함수가 있습니다
이 함수들은 알림창이 뜨는 함수들로, 이러한 스크립트를 삽입했을 때 브라우저에서 알림 팝업이 뜨면 스크립트가 실행되었다는 것을 쉽게 확인할 수 있습니다
❗stored XSS는 서버에 스크립트가 저장되어 있고 이 스크립트가 출력되는 위치에 접근한 사용자 모두 브라우저에서 해당 악성 스크립트가 실행되기 때문에, 광범위한 공격입니다
서버에 스크립트를 저장하는 방식이 아니라, 입력 파라미터를 그대로 response에 삽입시키는 경우를 활용한 XSS 공격
파라미터 데이터가 response에 삽입되어 오는 곳이기 때문에, reflected XSS는 스크립트를 삽입하는 곳과 출력하는 곳이 같습니다
1. 파라미터 데이터가 response에 그대로 포함되어 오는 곳 확인
reflected XSS는 우선 파라미터가 response에 포함되어 와야 가능하기 때문에, 이런 지점이 있는지 먼저 체크해야 합니다
2. 특수문자 체크
stored XSS와 마찬가지로 스크립트를 삽입하는 것이기 때문에, <script> ~~ </script>
를 활용하게 됩니다
그렇기 때문에 <
, '
, "
, >
를 사용 가능한지 체크합니다
3. 스크립트 삽입
취약점과 특수문자 사용 가능성도 체크했다면 이제 스크립트를 삽입해야 합니다
모의해킹에서는 stored XSS와 같이 취약점을 시각적으로 편하게 증명할 수 있는 alert
, prompt
, confirm
등의 함수를 활용해 XSS 취약점임을 증명합니다
❗그런데 reflected XSS는 서버에 스크립트를 저장하는 stored XSS와 달리 입력 파라미터를 활용한 공격이기 때문에 사용자가 파라미터로 script를 입력하지 않으면 공격이 일어날 수 없습니다
따라서 reflected XSS는 공격자가 GET 방식으로 스크립트를 전달하는 링크를 만들고 사용자가 이를 클릭하게 만들어야 합니다
지금까지 XSS 공격에 대해 알아보았습니다