나만의 연습장

XSS 공격 본문

웹 해킹/XSS Attack

XSS 공격

My-Berr 2018. 11. 19. 10:28

!!!경고!!!

본 게시물에는 해킹 기법에 관련한 정보가 포함되어 있습니다.

이를 사용하여 악용할 시에는 법적 문제가 발생할 수 있으며

공격으로 인한 사고에 대해서 작성자는 절대 책임지지 않습니다.


이 페이지를 열함하였다는 것은 이에 동의한  것으로 간주합니다.


XSS  (Cross Site Scripting)

크로스 사이트 스크립팅은 애플리케이션에서 브라우저로 전송하는 페이지에서 사용자가 입력하는 데이터를 검증하지 않거나, 출력 시 위험 데이터를 무효화 시키지 않을 때 발생한다.

즉, 공격자가 의도적으로 브라우저에서 실행될 수 있는 악성 스크립트를 웹 서버에 입력 또는 이것을 출력 시 위험한 문자를 중성화 시키지 않고 처리하는 애플리케이션의 개발 과정에서 발생한다. 



XSS 공격 종류


1) Stored XSS 공격

 - 접속자가 많은 웹사이 대상으로 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식이다.

간단히 말하면 위 그림과 같이 웹 애플리케이션 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해 놓는 방법이다. 이 때 웹 사이트의 게시판, 사용자 프로필 및 코맨트 필드등에 악성 스크립트를 삽입해 놓으면, 사용자가 사이트를 방문하여 저장되어 있는 페이지를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행되면서 공격한다.


가장 일반적인 방법은 게시판 같은 곳에 HTML 문서에 <script>를 이용하여 이 스크립트 태그 안에 악성 스크립트를 저장하는 방식이다.

 <script>alert(document.cookie)</script>


위의 명령어는 브라우저의 쿠키 값을 보여주는 간단한 스크립트이다. 위의 명령어가 포함되어 있는 어떤 페이지를 사용자가 읽을 때 마다, 브라우저는 이 스크립트를 실행하면서 쿠키 값을 보여주게 된다.



2) Reflected XSS 

- 악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 URL을 클릭하면 클라이언트를 공격하는 것이다.


웹 애플리케시션의 지정된 변수를 이용할 때 발생하는 취약점을 이용하는 것으로, 검색 결과, 에러 메시지 등 서버가 외부에서 입력받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입려되는 변수의 위험한 문자를 사용자에게 그대로 돌려주면서 발생한다.

http://www.server.com/search/?q=<script>alert(document.cookie)</script>&x=0&y=0


일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과 값을 사용자에게 전달하지만 위의 명령어와 같이 서버에서 정확한 결과가 없는 경우 서버는 브라우저에 입력한 값을 아래와 같이 그대로 HTML문서에 포함하여 응답한다. 이 경우 HTML페이지에 포함된 악성 스크립트가 브라우저에서 실행된다.

<html>


<body>


<div id="pageTitleTxt">


<h2><span class="highlight">Search Results</span><br />


Search: "<script>alert(document.cookie)</script>"</h2>


</body>


</html>


즉 사용자가 서버로 입력 한 값을, 서버는 요청한 사용자의 브라우저로 악성스크립트를 반사시킨다. Reflected XSS 공격은 이메일 메세지 또는 다르 웹 사이트와 같이 다양한 경로로 피해자 시스템에 전달 된다.


일반적으로 Reflected XSS 공격 단계는 다음과 같다.

  1. 공격자는 먼저 A사이트에 XSS 취약점이 있는 것을 발견한다.
  2. 민감한 정보를 획득할 수 있는 공격용 악성 URL을 생성한다.
  3. 공격자는 이 URL을 이메일 메시지에 포함하여 배포한다.
  4. 피해자가 URL을 클릭하면, 바로 공격 스크립트가 피해자로 반사되어 A사이트에 관련된 민감한 정보 (ID/Password, 세션정보)를 공격자에게 전송한다.


3) DOM based XSS 공격
- DOM 환경에서 악성 URL을 통해 사용자의 브라우저를 공격하는것 이다.

DOM(Document Object Model)이란 W3C 표준으로 HTML 및 XML 문서에 접근방법을 표준으로 정의하는 문서객체모델이다. W3C에서는 DOM을 '프로그램 및 스크립트가 문서의 컨텐츠, 구조 및 형식을 동적으로 접근 및 업데이트할 수 있도록 하는 언어 중립적인 인터페이스다'라고 정의되어 있다. DOM은 HTML문서를 계층적으로 보면서 컨텐츠를 동적으로 변경할 수 있다.

DOM 기반 XSS는 원본 클라이언트 측에서 사용하는 희생자의 브라우저에서 DOM "환경"을 수정 한 결과 공격 페이로드가 실행되는 XSS 공격입니다 스크립트를 사용하여 클라이언트 측 코드가 "예기치 않은"방식으로 실행되도록합니다. 즉, 페이지 자체 (HTTP 응답은 변경되지 않음)가 변경되지 않지만 DOM 환경에서 발생한 악의적 인 수정으로 인해 페이지에 포함 된 클라이언트 측 코드가 다르게 실행됩니다.

쉽게 말하면 피해자의 브라우저가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격한다. 페이지 자체는 변하지 않으나, 페이지에 포함되어 있는 브라우저 측 코드가 DOM 환경에서 악성코드로 실행된다. 

위에서 설명한 Stored XSS 및 Reflected XSS 공격의 악성 페이로드가 서버 측 애플리케이션 취약점으로인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하는 것이 반면, DOM Based XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점이다.

일반적으로 DOM Based XSS 취약점이 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 사용자에게 전송하면, 피해자는 이 URL 링크를 클릭하는 순간 공격 피해를 입게 된다.

<HTML>


<TITLE>Welcome!</TITLE>


Hi


<script>


 var pos=document.URL.indexOf("name=")+5;


 document.write(document.URL.substring(pos,document.URL.length));


</script>


<br>


Welcome to our system


This demo borrowed from http://www.webappsec.org/projects/articles/071105.shtml


</HTML>


위 그림과 같이 개발된 DOM 페이지의 name 변수에 아래와 같이 변수를 입력하면 (http://www.server.com/page.html?name=David) 정상적으로 동작한다. 하지만, DOM Based XSS 공격을 위해 아래 그림과 같이 입력하면, 브라우저에서 <script>의 내용이 실행되게 된다.

 http://www.server.com/page.html?name=<script>alert(document.cookie)</script>


아래 그림은 DOM Based XSS 공격을 예방기법을 회피하기 위한 방법으로 브라우저에서 '#' 문자 뒤에 있는 값을 서버로 전송하지 않는 것을 이용하지만, 브라우저에서는 동일하게 실행이 된다.

 http://server/page.html?name=David#<script>alert(document.cookie)</script>




'웹 해킹 > XSS Attack' 카테고리의 다른 글

XSS 공격의 피해 및 예방법  (0) 2018.11.19
Comments