TigerDemon
XSS 정의 및 공격 기법 본문
XSS 정의
XSS : 검증되지 않은 입력이 브라우저에서 악성 스크립트로 실행될 때 발생하는 취약점
- 웹사이트가 사용자에 악성 JavaScript를 반환하도록 조작하는 방식으로 작동
- 공격자가 스크립트를 주입 -> 서버가 이를 반영 -> 사용자의 브라우저가 실행 -> 계정 탈취나 조작 발생
- XSS를 테스트할 때는 보통 alert() 함수 사용
XSS 공격 유형
Reflected XSS - 반사형
애플리케이션이 HTTP 요청으로 받은 데이터를 안전하지 않게 즉시 응답에 포함할 때 발생
- 사용자가 수행할 수 있는 모든 동작 수행 가능
- 사용자가 볼 수 있는 모든 정보 열람 가능
- 사용자가 수정할 수 있는 모든 정보 변경 가능
- 피해자를 가장한 상태로 다른 사용자와의 상호작용 시작 가능(예: 악성 메시지 전송)
특징
- 공격을 전달하기 위해 외부의 전달 수단(링크, 이메일, 트윗 등)이 필요
- 자제적으로 애플리케이션 내부에서 사용자 전체에 자동으로 퍼지는 저장형 XSS보다 보통 영향도가 낮게 평가
과정
1. 웹 사이트에 검색 기능이 있고, 사용자가 입력한 검색어가 URL 파라미터로 전달될 때
https://insecure-website.com/search?term=gift
2. 서버가 다음처럼 입력값을 그대로 응답에 반영한다면
<p>You searched for: gift</p>
3. 애플리케이션이 이 데이터를 별도 처리(인코딩-검증 등)하지 않는다면, 공격자는 다음과 같은 악성 URL을 만들 수 있음
https://insecure-website.com/search?term=<script>/* Bad stuff here... */</script>
응답
<p>You searched for: <script>/* Bad stuff here... */</script></p>
Stored XSS
애플리케이션이 신뢰할 수 없는 출처로부터 받은 데이터를 저장(예:DB)하고, 이후의 HTTP 응답에서 그 저장된 데이터를 안전하지 않게 포함할 때 발생
특징
- 공격자가 피해자 브라우저에서 실행되는 스크립트를 제어할 수 있다면, 그 사용자를 실질적으로 완전 장악 가능
- 반사형은 외부 전달 수단(링크, 이메일 등)을 필요로 하지만, 저장형을 공격자가 악성 코드를 애플리케이션 자체에 저장하므로 추가 전달 수단 없이 사용자들이 해당 페이지를 열기만 하면 자동으로 공격이 실행됨
- 반사형은 공격을 당할 때 사용자가 로그인 상태여야 하지만, 저장형은 공격자가 한 번 저장해두면 사용자가 나중에 해당 페이지를 열어서 항상 공격에 노출됨
과정
1. 사용자가 블로그 포스트에 댓글을 제출하는 기능이 있을 때, 정상 댓글은 다음과 같이 보임
<p>This post was extremely helpful.</p>
2. 애플리케이션이 입력값을 검증/인코딩하지 않으면 공격자는 다음처럼 악성 댓글을 제출할 수 있음
* 서버에 저장된 이 값이 다른 사용자의 페이지에 그대로 포함되면, 해당 사용자 브라우저에서 <script>/*Bad stuff here... */</script>가 실행됨
<script>/*Bad stuff here... */</script>
DOM based XSS
자바스크립트가 사용자 제어 가능한 입력(source)을 받아 innerHTML, document.write, eval() 등의 위험한 함수(sink)로 전달할 때 발생
특징
- 서버 응답이 아니라 클라이언트 측(JS)에서만 발생
- 주로 window.location, document.cookie, localStorage 등에서 입력을 가져옴
- 반사형/저장형과 달리 서버 로그에 흔적이 남지 않음
공격 흐름
1. URL등에서 데이터 입력
2. 자바스크립트가 그대로 DOM에 출력
3. 브라이저에서 악성 JS 실행
과정
웹 페이지 안에 들어있는 자바스크립트 코드
var search = document.getElementById('search').value;
var results = document.getElementbyId('results');
results.innerHTML = 'You searched for: ' + search;
1. 공격자는 취약한 페이지의 입력 위치(예: 검색어, URL 파라미터)를 찾음
2. 공격자는 그 입력에 특수한 값을 넣음(예: <img src = x onerror=alert('no')>
3. 피해자가 그 페이지(또는 공격자가 만든 URL)를 방문하면, 페이지 JS가 그 값을 읽어 innerHTML 등에 그대로 넣음
4. 브라우저가 태그를 만들고(예:<img>), 이미지 로드에 실패하면 onerror가 실행되어 alert('no')가 뜸(또는 더 위험한 코드 실행)
You searched for : <img src=1 onerror='/* Bad stuff here... */'>
XSS 공격 유형
XSS로 할 수 있는 일
- 사용자를 사칭하거나 세션 탈취
- 사용자의 권한으로 명령 수행
- 로그인 정보 탈취
- 웹사이트 변조(Defacement)
방어 방법
- 모든 입력 -> 검증 -> 인코딩 -> 안전 출력
- 입력 필터링
- 출력 인코딩
- 적절한 헤어 설정
- CSP(Content Security Policy)
'2025-SWLUG > 웹해킹' 카테고리의 다른 글
| burp suite로 XSS 실습 2 (0) | 2025.11.05 |
|---|---|
| burp suite로 XSS 실습 1 (0) | 2025.11.05 |
| burp suite로 Path traversal 실습 2 (0) | 2025.10.26 |
| burp suite로 Path traversal 실습 1 (0) | 2025.10.26 |
| Path traversal 정의 및 공격 기법 (0) | 2025.10.26 |