Advent of Cyber 2025 Day 11 리포트: Cross-Site Scripting (XSS) | TryHackMe
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)
-
대상 머신 시작
- OpenVPN이 활성화되어 있으면 브라우저에 대상 IP 주소를 입력합니다.
- 그렇지 않으면 TryHackMe에서 제공하는 AttackBox 머신을 실행합니다.

-
입력 박스 식별
페이지에는 두 개의 입력 필드가 있으며, 각각 다른 유형의 XSS에 취약합니다. -
반사된 XSS 테스트
첫 번째 입력 박스에 다음 페이로드를 입력합니다:alert('Reflected Meow Meow')폼을 제출하면 알림 창이 나타나며, 취약점이 확인됩니다.

-
플래그 획득
- 방은 간단합니다: 각 입력 박스에 적절한 XSS 페이로드를 제공하면 플래그가 표시됩니다.
- 제공된 페이로드를 해당 필드에 복사·붙여넣어 플래그를 얻으세요.
결론
이 방은 고전적인 반사형 및 저장형 XSS 공격을 보여주며, 올바른 출력 인코딩, 안전한 DOM 조작, 보안 쿠키 속성 설정과 같은 핵심 완화 기술을 강조합니다. 이러한 개념을 연습하면 보안 코딩 실무를 강화하고 일반적인 웹 취약점에 대한 인식을 높일 수 있습니다.