일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- HTML
- c++
- 기계학습
- WarGame
- BOJ
- 자료구조 복습
- 드림핵
- hackerrank
- BOJ Python
- 파이썬
- siss
- CSS
- Sookmyung Information Security Study
- 숙명여자대학교 정보보안동아리
- SWEA
- 머신러닝
- PHP 웹페이지 만들기
- lob
- 웹페이지 만들기
- Javascript
- c
- C언어
- 풀이
- The Loard of BOF
- 숙명여자대학교 정보보안 동아리
- XSS Game
- 백준
- Python
- 생활코딩
- hackctf
- Today
- Total
혜랑's STORY
XSS란? - XSS 개념 본문
1. XSS(Cross-site-Scripting) 공격이란?
웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나, 주로 사용자의 정보(GET, POST, COOKIE, SESSION 등)를 탈취하기 위하여 특수 문자나 예약어, 스크립트를 나타내는 (, ), !, @, {, }, \n, \t, \0, ', ", >, <, %, $ 등의 문자를 이용한다.
공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다고 한다. 따라서 XSS에 대한 방어 조치를 하지 않은 웹 사이트들이 공격 대상이며, 공격 대상 웹사이트에 삽입한 스크입트를 이용하여 다른 웹사이트로 접근하는 것도 가능하기 때문에 주의하지 않는다면 공격에 희생될 수 있다.
2. XSS 공격
XSS 공격은 크게 Reflected XSS와 Stored XSS, DOM Based XSS 세 가지로 분류할 수 있다.
1) Reflected XSS
공격자가 미리 XSS 공격에 취약한 웹 사이트를 탐색하고, XSS 공격을 위한 스크립트를 포함한 URL을 사용자에세 노출시킨다. 사용자가 해당 URL을 클릭 할 경우, 취약한 웹 사이트의 서버에 스크립트가 포함 된 URL을 통해 Request를 전송하고, 웹 서버에서는 해당 스크립트를 포함한 Respone을 전송하게 된다.
2) Stored XSS
웹 사이트의 게시판에 스크립트 삽입하는 공격 방식이다. 공격자는 게시판에 스크립트를 삽입한 후 공격 대상자가 해당 게시글을 클릭하도록 유도한다. 미리 XSS 공격을 위한 스크립트를 포함 한 게시글을 웹 사이트에 업로드 한 뒤, 게시글의 URL을 사용자에게 노출하고 사용자가 게시글을 확인함으로써 URL에 대한 요청을 서버에 전송한다. 웹 서버에서는 스크립트를 포함한 Respone를 전송하며 공격이 수행된다.
3) DOM Based XSS
DOM(Document Object Model)은 HTML 및 XML 문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델이다. 즉, 구조화 된 문서를 표현하는 방식으로 W3C의 공식 표준이다.
DOM Based XSS(=type-0 XSS)는 피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS 공격이다. 즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM 환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행된다.
1), 2) 취약점의 경우 서버 측 결함으로 인해 응답 페이지에 악성 스크립트 구문이 포함되어 브라우저로 전달되는 것이지만, 3)의 경우 서버와 관계 없이 브라우저에서 발생한다.
3. XSS 공격 기법
1) 스크립트 태그
방법
-> 스크립트 태그로 자바스크립트를 실행
예제
<script>alert('XSS');</script>
설명
-> 스크립트 태그의 스크립트를 실행시킨다. 브라우저단에서 필터링 해주는 경우도 있으나 아래와 같이 예외 코드도 있다.
<script class="xss">$('.xss').parents().eq(1).find('a').eq(1).click();$('[data-action=retweet]').click();alert('XSS in Tweetdeck')</script>
2) 자바스크립트 태그
방법
-> 링크 태그로 자바스크립트를 실행
예제
<a href="javascript:alert('XSS')">XSS</a>
설명
-> 브라우저에서 about: 링크와 같이, javascript:로 시작하는 링크는 스크립트를 실행시킨다. XSS를 실행시키는 데만 사용되지는 않고, 링크 태그를 클릭할 경우, 다른 사이트로 이동하는 것을 막기 위해서 아래와 같이 사용되는 경우도 있다.
<a href="javascript:;">LINK</a>
-> 스크립트 태그와 같이 javascript:를 필터링하는 경우가 많아 많은 사이트에서 막고있다.
3) 이벤트 태그
방법
-> 이벤트 속성을 사용
예제
<img src="#" onerror="alert('XSS')">
설명
-> 이벤트 속성으로 스크립트를 실행할 수 있다. 주로 on으로 시작하는 속성이 이벤트 속성으로 자주 사용되는 이벤트 속성으로는 onload, onerror, onclick 등이 있다. 물론 이 방법 역시 많이 필터링 되고 있다.
4) 블랙리스트 우회
방법
-> 알려지지 않으느 태그와 속성들을 사용
예제
<ruby oncopy="alert('XSS')">XSS</ruby>
설명
-> 블랙 리스트 방식으로 막는 사이트에 사용할 수 있다.
4. 방어기법
XSS는 데이터를 입력할 때와 출력할 때, 모두 필터링하고 클라이언트에도 막을 수 있을만한 수단을 구성해 놓는 것이 좋다.
1) script 문자 필터링
사용자의 모든 입력값에 대하여 서버측에서 필터링을 해 주어야 한다. PHP의 eregi 함수를 이용하면 XSS 공격에 주요 사용되는 문자들을 필터링 할 수 있다. 주로 스크립트를 실행하기 위한 특수문자를 필터링하며, <. >, ", ' 등의 문자가 있다.
2) htmlentities 사용
PHP 함수 중 htmlentities라는 함수가 있다. htmlentities는 모든 특수 문자를 HTML 엔티티(entity)로 변환한다.
-> HTML 엔티티는 "&약어;" 및 "&#숫자;"의 형태를 표현하는 것을 의미한다.
'2021 SISS 21기 활동 > 겨울방학 XSS' 카테고리의 다른 글
XSS Game - Level 05 (0) | 2021.02.10 |
---|---|
XSS Game - Level 04 (0) | 2021.02.01 |
XSS Game - Level 03 (0) | 2021.01.25 |
XSS Game - Level 02 (0) | 2021.01.21 |
XSS Game - Level 01 (0) | 2021.01.14 |