본문 바로가기

공격기법/Web

XSS(Cross Site Scripting)과 Cheat Sheet

XSS 공격을 성공적으로 수행하기 위해서는 아래의 2가지 조건이 요구

 

1. 입력 데이터에 대한 충분한 검증 과정이 없어야함

입력한 데이터가 충분한 검증 과정이 이루어지지 않아 악성 스크립트가 삽입될 수 있어야함

2. 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야함

응답 데이터 출력 시 악성 스크립트가 웹 브라우저의 렌더링 과정에 성공적으로 포함되어야함

 

XSS를 터트기위해 주로 사용되는 태그들

script, iframe, on* 이벤트(onmouseover, onload, onerror 등), embed, object

 

XSS는 크게 2가지로 분류

1. Reflected XSS

반사형 XSS

주로 검색기능에서 발생

 

2. Stored XSS

저장형 XSS

주로 댓글, 글쓰기 기능에서 발생

 

 

방어기법들

1. Server-side Mitigations

서버 단에서 검증하는 방법

HTML 형태를 지원할 필요가 없어 HTML 태그가 입력될 일이 없다면

꺽쇠 (<, >), 따옴표(", ')와 같은 특수 문자를 

HTML Entity Encoding을 이용해 태그로써 인식이 안되도록 수정(Escape)

ex)

php-htmlspecialchars()

python-from jinja2 import utils

 

마크업을 지원해야한다면 화이트 리스트 필터링 사용

 

2. HTTPOnly 플래그 사용

Set-Cookie: NAME=VALUE; HttpOnly

JSscript에서 쿠기에 접글을 막음

session cookie에는 HTTPOnly 플래그를 사용하는 것이 좋음

 

3. CSP(Content Security Policy) 사용

 응답 헤더나 meta 태그를 통해 아래와 같이 선언해서 사용할 수 있으며,

각각의 지시어를 적용하여 사이트에서 로드하는 리소스들의 출처를 제한가능

https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP

 

Content Security Policy (CSP)

Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross Site Scripting (XSS) and data injection attacks. These attacks are used for everything from data theft to site defacemen

developer.mozilla.org

default-src 'self' *.test.com

모든 리소스(이미지 파일, 스크립트 파일 등)의 출처가

현재 도메인이거나 *.test.com 도메인이 출처인 경우에만 허용

script-src

자바스크립트 코드의 출처를 제한할 수 있으며,

공격자가 외부에 업로드된 자바스크립트 파일을 호출하거나

직접 자바스크립트 코드를 작성하는 등의 행동을 막을 수 있음

script-src 'nonce-noncevalue13b739d8ea12' 와 같이

script-src를 이용해 nonce (랜덤) 값을 설정하고

HTML 태그를 이용해 자바스크립트를 실행할 때는

반드시 서버에서 생성된 nonce 값을 알아야만 실행될 수 있도록 할 수 있음

즉, XSS 공격을 당하더라도 서버에서 매번 생성되는 nonce 값을

유추할 수 없다면 일반적인 방법으로 자바스크립트 실행이 불가능

script-src 'sha256-hashvalue_base64'와 같은 형태로

자바스크립트나 스타일시트의 해시를 구해 CSP를 설정해주면

미리 구해둔 해시와 다를 경우 실행하지 않도록 할 수 있음

 

4. X-XSS-Protection

X-XSS-Protection: <value> 형식

웹 브라우저에 내장된 XSS Filter를 활성화할 것인지를 설정

XSS Filter는 웹 브라우저에서 전송된 Request 값이 XSS 공격 코드와 유사하게 생겼고,

Response에 해당 공격 코드가 포함되었을 경우에

XSS 공격이 수행되었다고 판단하여 XSS 공격이 발생했음을 유저에게 알리고 차단

 

X-XSS-Protection: 0
X-XSS-Protection: 1

X-XSS-Protection: 1; mode=block

X-XSS-Protection: 1; report=<reporting-uri>

 

0일 경우 XSS Filter를 사용하지 않으며

Header를 선언하지 않았을 때의 브라우저 기본 값은 1

1일 경우 XSS 공격이 감지되면 해당 부분만 제거한 뒤 페이지 결과를 화면에 출력

mode=block일 경우 XSS 공격이 감지되면 페이지 전체의 렌더링을 중단하며,

report를 선언할 경우에 XSS 공격이 감지된 사실을

미리 설정된 주소에 신고하여 운영자가 대처하기 쉽도록 도와줌

 

XSS Filter는 XSS 공격에 대한 강력한 방어수단이었지만, 최신 브라우저에서 삭제되는 추세

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-XSS-Protection

 

X-XSS-Protection

HTTP X-XSS-Protection헤더는 Internet Explorer, Chrome 및 Safari에서 제공하는 기능으로서, (XSS) 공격을 감지 할 때 페이지 로드를 중지시킬 수 있습니다. 최신 브라우저에서는 Inline Javascript('unsafe-inline')사�

developer.mozilla.org

 

 

XSS CheatSheet

http://dntsecurity.blogspot.com/2017/02/xss.html

 

XSS(Cross Site Scripting) 취약점 - 우회 방법 및 대응 방안

정보보안 스터디 블로그입니다.

dntsecurity.blogspot.com

Cheat Sheet

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

 

XSS Filter Evasion Cheat Sheet | OWASP

XSS Filter Evasion Cheat Sheet on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.

owasp.org

https://portswigger.net/research/one-xss-cheatsheet-to-rule-them-all

 

One XSS cheatsheet to rule them all

PortSwigger are proud to launch our brand new XSS cheatsheet. Our objective was to build the most comprehensive bank of information on bypassing HTML filters and WAFs to achieve XSS, and to present th

portswigger.net

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

 

Cross-Site Scripting (XSS) Cheat Sheet - 2020 Edition | Web Security Academy

Interactive cross-site scripting (XSS) cheat sheet for 2020, brought to you by PortSwigger. Actively maintained, and regularly updated with new vectors.

portswigger.net

 

'공격기법 > Web' 카테고리의 다른 글

XSS와 CSRF의 차이  (0) 2020.03.08
브루트 포스 공격  (0) 2020.01.28
CSRF(Cross Site Request Forgery)  (0) 2019.11.15
SQL Injection  (0) 2019.09.09
URL 점핑(Jumping)  (0) 2019.05.24