Advent of Cyber 2025 Day 11 리포트: Cross-Site Scripting (XSS) | TryHackMe

발행: (2025년 12월 30일 오후 10:10 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

XSS 이해하기

보통 웹사이트나 웹 애플리케이션은 서버에서 정보를 표시합니다. 하지만 사용자는 입력 필드를 통해 정보도 제공할 수 있습니다. 웹 서버가 사용자 입력을 제대로 검증하지 않으면 무해한 텍스트 대신 악성 코드가 삽입될 수 있습니다. 이 악성 코드는 실행되어 자격 증명을 탈취하거나 페이지를 훼손하거나 사용자 정보를 변경할 수 있습니다.

저장된 XSS

저장된 XSS 공격은 악성 코드가 서버에 저장될 때 발생합니다(예: HTML 또는 JS 파일에).
예시: domain.com/tonybennet 에 삽입된 스크립트가 포함되어 있습니다. 이후 그 페이지를 방문하는 모든 사용자는 코드가 실행되어 피해를 입게 됩니다.

반사된 XSS

반사된 XSS 공격은 보다 직접적입니다.
예시 링크: facebook.com/profile/search?term=alert(1)
서버가 term 파라미터를 정제 없이 그대로 반영하면, 브라우저는 해당 링크를 열 때 alert(1)(또는 다른 악성 스크립트)을 실행합니다.

XSS 방어 방법

  • 위험한 렌더링 경로 비활성화: 입력을 HTML이 아닌 일반 텍스트로 처리하려면 innerHTML보다 textContent를 사용합니다.
  • 쿠키를 JavaScript에서 접근 불가능하게 만들기: 세션 쿠키에 HttpOnly, Secure, SameSite 속성을 설정합니다.
  • 입출력 정제 및 인코딩: 제한된 HTML(예: 안전한 링크나 기본 서식)만 허용할 경우, 모든 사용자 제공 데이터를 정제하고 인코딩합니다. 이렇게 하면 <script> 태그, 이벤트 핸들러, javascript: URL 등 실행 가능한 코드로 해석될 수 있는 요소를 제거하거나 이스케이프하면서 안전한 서식은 유지됩니다.

진행 과정 – Advent of Cyber 2025 Day 11 (XSS)

  1. 대상 머신 시작

    • OpenVPN이 활성화되어 있으면 브라우저에 대상 IP 주소를 입력합니다.
    • 그렇지 않으면 TryHackMe에서 제공하는 AttackBox 머신을 실행합니다.

    THM Day 11 스크린샷

  2. 입력 박스 식별
    페이지에는 두 개의 입력 필드가 있으며, 각각 다른 유형의 XSS에 취약합니다.

  3. 반사된 XSS 테스트
    첫 번째 입력 박스에 다음 페이로드를 입력합니다:

    alert('Reflected Meow Meow')

    폼을 제출하면 알림 창이 나타나며, 취약점이 확인됩니다.

    반사된 XSS 알림 창

  4. 플래그 획득

    • 방은 간단합니다: 각 입력 박스에 적절한 XSS 페이로드를 제공하면 플래그가 표시됩니다.
    • 제공된 페이로드를 해당 필드에 복사·붙여넣어 플래그를 얻으세요.

결론

이 방은 고전적인 반사형저장형 XSS 공격을 보여주며, 올바른 출력 인코딩, 안전한 DOM 조작, 보안 쿠키 속성 설정과 같은 핵심 완화 기술을 강조합니다. 이러한 개념을 연습하면 보안 코딩 실무를 강화하고 일반적인 웹 취약점에 대한 인식을 높일 수 있습니다.

Back to Blog

관련 글

더 보기 »