개발일지/기타

XSS(Cross Site Script)란

티에리앙리 2022. 4. 22. 02:21

XSS(Cross Site Script)란

XSS란 웹 어플리케이션에서 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우에 공격자가 입력이 가능한 폼에 악의적인 스크립트를 삽입하여 해당 스크립트가 희생자 측에서 동작하도록 하여 악의적인 행위를 수행하는 취약점이다.

공격자는 취약점을 이용하여 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹 페이지 변조 등의 공격을 수행한다.

XSS 공격 종류

  • Stored XSS (저장형 XSS)

* 공격자가 취약한 웹서버에 악성 스크립트를 저장하면 희생자가 해당 자료를 요청할 때 해당 악성 스크립트가 삽입된 응답 페이지가 전달되어 클라이언트 측에서 동작하는 방식이다.

https://t1.daumcdn.net/cfile/tistory/9920EB3359A8B2870A

  • Reflected XSS (반사형 XSS)
  • 외부에 있는 악성 스크립트가 희생자 액션에 의해 취약한 웹서버로 전달되고, 웹서버의 응답 페이지에 해당 악성 스크립트가 삽입되어 희생자 측에서 동작하는 방식이다.

https://t1.daumcdn.net/cfile/tistory/99813F3359A8B26037

  • DOM based XSS (DOM 기반 XSS)
  • 희생자의 웹 브라우저에서 응답 페이지에 포함된 정상적인 스크립트가 동작하면서 DOM 객체를 실행할 때 URL 등에 포함된 악성 스크립트가 동작하는 방식이다. 응답 페이지에 관계없이 웹 브라우저에서 발생한다.

https://t1.daumcdn.net/cfile/tistory/9997D03359A8B66306

ex) XSS 공격 예시

// 1. 스크립트 태그alert("XSS 공격!"); location.href = "<a href=https://www.naver.com/;>https://www.naver.com/;</a>// 2. 자바스크립트 태그 XSS // 3. 이벤트 속성  // 4. 내용 난독화 XSS // 5. 등등

피해

쿠키/세션ID 정보 탈취

시스템 관리자 권한 탈취

악성 코드 다운로드

XSS를 막기 위한 방법

  1. (서버에서)입력 값을 제한한다.

먼저 사용자의 입력값을 제한하여 스크립트틀 삽입하지 못하도록 해야 한다. http://www.qubitsec.io?page=1 위와 같은 URL 에서 사용자의 입력값인 page 가 화면에 바로 뿌려지는데 이때 page 의 값을 숫자만으로 허용한다면 그 외의 입력값에는 출력되지 않기 때문에 대응이 가능해진다.

  1. 스크립트 공격 구문을 다른 것으로 치환해야하다.
.replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll(">","&gt;").replaceAll("\\r\\n", "<br>")
  1. 스크립트 영역에 출력 자제

이벤트 핸들러 영역에 스크립트가 삽입되는 경우 보호기법들을 우회할 수 있기 때문에 사용자의 입력을 출력하는 것을 최대한 자제해야 하며 필요한 경우 대응 방안과 함께 사용해야 한다.

  1. 라이브러리 사용

 

자료참고

https://stupidsecurity.tistory.com/17