일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL Injection
- 배시쉘 버그
- openvas
- root-me
- MySQL 원격 로그인.
- DNS 정보수집
- 취약점
- metasploit
- SecureCheq
- GHDB
- Nexpose
- 메모리 보호
- exploit-db
- assert()
- Lampiao
- File Upload-ZIP
- ASCII-Aromor
- file upload
- MBSA
- shellshock
- ctf
- Canary
- WHISTL
- 파일 업로드
- 필터링 우회
- aslr
- JSP 우회
- msfconsole
- code injection
- bash shell bug
- Today
- Total
나만의 연습장
XSS 공격 본문
!!!경고!!!
본 게시물에는 해킹 기법에 관련한 정보가 포함되어 있습니다.
이를 사용하여 악용할 시에는 법적 문제가 발생할 수 있으며
공격으로 인한 사고에 대해서 작성자는 절대 책임지지 않습니다.
이 페이지를 열함하였다는 것은 이에 동의한 것으로 간주합니다.
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 공격 단계는 다음과 같다.
- 공격자는 먼저 A사이트에 XSS 취약점이 있는 것을 발견한다.
- 민감한 정보를 획득할 수 있는 공격용 악성 URL을 생성한다.
- 공격자는 이 URL을 이메일 메시지에 포함하여 배포한다.
- 피해자가 URL을 클릭하면, 바로 공격 스크립트가 피해자로 반사되어 A사이트에 관련된 민감한 정보 (ID/Password, 세션정보)를 공격자에게 전송한다.
- DOM 환경에서 악성 URL을 통해 사용자의 브라우저를 공격하는것 이다.
위에서 설명한 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 |
---|