AnbyMata의 해킹 노트

[THM] XSS - EP.1 (Task 1~3) 본문

TryHackMe/Web Hacking

[THM] XSS - EP.1 (Task 1~3)

AnbyMata 2026. 2. 25. 22:00

TryHackMe - "XSS". Task 1~3. Write-up + Extra Study!

출처: https://tryhackme.com/room/axss

 

XSS

Explore in-depth the different types of XSS and their root causes.

tryhackme.com

 

[1]  Introduction

Cross-site scripting (XSS)

- 대표적인 웹 취약점 중 하나 (1999년에 발견됨)

- 여전히 빈번히 발생하는 취약점

- 웹사이트에 malicious script(악성 스크립트)를 삽입

→ 브라우저에서 악성 스크립트를 실행

- 서버가 아닌 사용자 브라우저가 공격 대상

- 2021년부터 Injection 공격의 범주로 포함되었습니다.

 

배우는 내용들

- 3가지 XSS 유형

 + 1. Reflected XSS

 + 2. Stored XSS

 + 3. DOM-based XSS

- XSS를 방어하는 방법

 

 

 


[2]  Terminology and Types (용어 및 유형)

Same-Origin Policy (SOP)

- 현대 웹 브라우저에 구현된 보안 메커니즘

- 한 웹 페이지의 malicious script(악성 스크립트)가 다른 페이지의 민감한 데이터에 접근하는 것을 방지

→ 즉, 서로 다른 origin(출처) 간 데이터 접근 차단

 

- Origin = protocol + hostname + port 를 기준으로 정의

- 정상적 SOP 환경에선, 다른 사이트의 cookie/데이터 접근 불가

[보충 설명]
Origin 예시를 들어보겠습니다.
`https://anbymata.com:443` = https (protocol) + anbymata.com (hostname) + 443 (port)
`https://anbymata.com:8080` = https (protocol) + anbymata.com (hostname) + 8080 (port)
protocol, hostname, port 셋 중 하나만 달라도 서로 다른 origin 입니다.
즉, `https://anbymata.com443`과 `https://anbymata.com:8080`은 port 번호가 달라 서로 다른 orgin입니다.

정상적인 SOP 환경에서 다른 사이트의 cookie/데이터 접근 불가하다는 것은,
우리가 볼 수 있는 악성 광고 script는 은행 페이지나 블로그 페이지 같은 다른 orgin의 데이터에 접근하거나 해당 페이지의 기능을 조작할 수 없다는 뜻입니다.

 

 

XSS의 SOP 우회

- XSS = 공격자가 다른 사용자가 보고 있는 웹 페이지에 malicious script(악성 스크립트) 를 삽압할 수 있는 취약점

→ 하지만, XSS동일한 origin에서 실행됨 → SOP우회

 

- 결과적으로, 브라우저는 malicious script(악성 스크립트) 정상 script로 인식

→ cookie 접근 가능 / session 탈취 가능 / 페이지 조작 가능

 

 

 

[2-1] JavaScript for XSS

- XSS 공격을 이해하고 응용하기 위해선 JavaScript 기본 지식이 중요함

- XSS는 client-side 공격으로 공격 대상과 유사한 브라우저에서 테스트해야 함

→ 브라우저마다 특정 코드들을 다르게 처리할 수 있음

→ (Chrome에서는 작동한 exploit 코드가 Firefox나 Safari에서는 안 먹힐 수 있음)

 

 

브라우저에서 JavaScript 코드 테스트하는 법

Firefox의 Web Developer Tools, Chrome의 Developer Tools, Safari의 Web Inspector에 있는 Console을 열어야 합니다.

 

1. 단축키로 바로 Console 진입

 - Google Chrome: Ctrl + Shift + J

 - Firefox : Ctrl + Shift + K

 - Naver Whale (Windows): Ctrl + Shift + J (기본 설정값)

 - Naver Whale (Mac): Option + Command + I → Console 탭

 - Safari: Command + Option + J

(필자의 경우 Naver Whale (Windows) 환경입니다. Notion이 실행되고 있다면, 단축키를 먼저 먹어버립니다..)

 

2. `F12`로 개발자 도구로 들어가 Console 진입

 - `F12` 키로 개발자 도구로 들어가 Console로 이동합니다.

 - Google Chorme, Naver Whale, Microsoft Edge, Firefox 에서 가능합니다.

Naver Whale (Windows) 환경

 

 

 

[2-2] 기본 JavaScript 함수들

1. alert() : 브라우저에서 JavaScript 경고창을 표시

 - alert(1) = 숫자 `1`이 표시된 경고창이 나타남

 - alert('XSS') or alert("XSS") = 문자열 `XSS`이 표시된 경고창이 나타남

`alert('AnbyMata')`

 = `alert('AnbyMata')`를 입력하고 Enter 키를 누르면 "AnbyMata" 텍스트를 가진 경고창이 나타납니다.

 

 

 

2. console.log() : 브라우저의 JS 콘솔에 값을 출력

 - console.log(100) = 숫자 `100`이 콘솔에 출력됨

 - console.log("XSS") = 문자열 `XSS`가 콘솔에 출력됨

`console.log('AnbyMata')`

 = `console.log('AnbyMata')`를 입력하고 Enter 키를 누르면 콘솔에 "AnbyMata"가 출력됩니다.

 

 

 

3. btoa() / atob() = Base64 encoding(인코딩) / decoding(디코딩)

 - btoa("XSS") = 문자열 `XSS`를 Base64로 인코딩 된 ASCII 문자열로 변환

 - atob("asdf") = 인코딩된 ASCII 문자열을 원래대로 디코딩

`btoa('AnbyMata Note)` → `atob('QW5ieU1hdGEgTm90ZQ==')`

 = `btoa('AnbyMata Note)`로 "AnbyMata Note"를 인코딩하면 "QW5ieU1hdGEgTm90ZQ=="가 됩니다.

 = 이 인코딩된 문자열을 atob()로 디코딩 시키면 다시 "AnbyMata Note"가 됩니다.

 

 

 

번외. alert(document.cookie)

 - `document.cookie`는 현재 페이지의 쿠키 정보를 의미함

 → 현재 페이지의 쿠키 정보를 출력해보는 시도로 SOP 우회 사례의 대표적 예시

 

 

 

[2-3] XSS의 종류들

1. Reflected XSS

 - 사용자가 입력한 값이 그대로 사용자에게 다시 표시(반사)되는 것을 이용한 공격

 - 입력값이 데이터베이스에 저장되진 않음

 - 주로 검색창, URL 파라미터에서 발생

 - 피해자가 특정 링크를 클릭해야 공격 성립

 - ex) 특정 검색어 입력 시 페이지에 그 검색어가 그대로 표시됨 → 해당 검색어 안에 악성 스크립트를 삽입해 공격 시도

 

2. Stored XSS

 - 사용자 입력이 웹 사이트의 데이터베이스에 저장되는 것을 이용한 공격

 - 피해자의 별도 클릭 없이 자동 실행 가능

 - 가장 위험도가 높음

 - 게시판, 댓글, 리뷰 기능에서 자주 발생

 - ex) 사용자의 댓글이 DB에 저장되어 다른 사용자에게 표시됨 → 댓글에 악성 스크립트를 삽입해 공격 시도

 

3. DOM-based XSS

 - Document Object Model (DOM) 내부의 취약점을 이용한 공격

 - 서버 응답과 무관하게 기존 페이지 요소를 조작하는 공격

 - DOM 조작 과정에서 발생

 - 클라이언트 JavaScript 로직의 취약점

 

 

 


[3]  Causes and Implications

XSS는 사용자가 악성 스크립트를 정상 기능으로 착각해 자신의 브라우저에서 실행하게 되면서 이뤄지는 공격입니다.

 

 

[3-1] XSS 취약점이 발생하는 이유

1. Insufficient input validation and sanitzation (= 입력 검증 부족)

 - 사용자 입력은 HTML 페이지 생성에 사용됨

 - 필터링부족하여 악성 스크립트가 그대로 실행

 

 

2. Lack of output encoding (= 출력 인코딩 미흡)

 - HTML에서는 `<`, `>`, ` " `, `&`과 같은 특수문자들의 인코딩이 필요

 - JavaScript에서는 ` ' `, ` " `, `\`과 같은 특수문자들을 escape 시켜야 함

[보충 설명]
Escape 처리 = 특수 문자를 브라우저가 "코드"가 아닌 "문자"로 인식하게 변환하는 것
알다시피 `<h1>` 같은 태그는 HTML 문법으로 제목으로 랜더링되게끔 하는 기능을 가집니다.

Escape 안된 `<h1>AnbyMata</h1>` 문자열의 경우,
화면에 커다란 제목 글자로 "AnbyMata"가 출력됩니다.

Escape 처리된 `<h1>AnbyMata</h1>` 문자열의 경우,
화면에 일반 글자로 "<h1>AnbyMata</h1>"이 출력됩니다.

이렇듯 escape 처리를 해야 브라우저가 입력값을 단순 텍스트로 인식하여 공격자가 HTML 코드를 주입하는 것을 방지할 수 있습니다.

 

 

3. Improper use of security headers (= CSP 설정 오류)

 - 보안 헤더들은 XSS 취약점을 완화할 수 있음

 - Content Security Policy (CSP)의 경우 신뢰 가능 출처를 정의하여 XSS의 위험을 줄임

 - 그러나 CSP 설정이 잘못되면 보안 기능이 무력화될 수 있음

 - `unsafe-inline`, `unsafe-eval` 같은 지시어의 사용을 주의해야 함

 

 

4. Framework and lanuage vulnerabilities (= 구형 프레임워크 취약점)

 - 일부 오래된 웹 프레임워크는 보안 메커니즘이 부족함

 - 최신 프레임워크들은 기본 escape가 제공되고, 발견된 취약점들도 빠르게 패치됨

 

 

5. Third-party libraries (= 서드 파티 라이브러리 문제)

 - Thrid-party = 외부에서 가져다 쓰는 코드나 서비스

 - 웹 애플리케이션에 서드파티 라이브러리 통합 시, 취약점이 발생할 수 있음

 

 

 

[3-1] XSS 취약점의 대표 사례들

1. Session hijacking (= 세션 탈취)

 - `document.cookie` 접근 가능 → 세션 쿠키 탈취 가능

 - session ID를 탈취 → 계정 하이재킹 가능

 - 피해자 계정으로 로그인하여 상태를 유지할 수 있음

 

 

2. Phishing and credential theft (= 피싱 및 계정 탈취)

 - XSS로 사용자에게 가짜 로그인 창을 표시할 수 있음

 - 사용자가 실제 사이트로 오인해 ID와 비밀번호를 입력시 이를 그대로 탈취

 - 화면 일부를 가리는 대화 상자로 사용자의 암호화폐 지갑 연결을 유도하기도 함

 - 피싱 공격과 결합되어 사용됨

 

 

3. Social engineering (= 사회공학 공격)

 - XSS로 인증된 웹사이트 내부에 정상처럼 보이는 가짜 팝업이나 알림을 생성

 - 사용자가 속아 악성 링크를 클릭 → 악성 사이트로 연결됨

 - 클릭 유도형 공격

 

 

4. Content manipulation and defacement (= 사이트 변조)

 - XSS로 웹 사이트의 내용을 변경 기업의 평판에 피해를 줌

 - 공지사항을 조작하는 등으로 기업의 이미지 훼손

 

 

5. Data exfiltration (= 데이터 유출)

 - XSS로 사용자의 브라우저에 표시되는 모든 정보에 접근해 이를 외부로 유출

 - DOM에 표시된 데이터, 사용자 입력 데이터, API 응답 데이터 등을 탈취

 - 개인 정보나 금융 정보와 같은 민감한 데이터들이 유출될 수 있음

 

 

6. Malware installation (= 악성코드 배포)

 - 숙련된 공격자는 XSS로 malware (악성코드)를 확산시킬 수 있음

 - 취약한 웹사이트를 통해 drive-by download 공격 수행 가능

 - drive-by download 공격 = 사용자가 클릭 같은 별도의 동작없이 사이트 방문만으로 악성 파일이 다운로드되거나 실행되는 공격

 

 

 


[TryHackMe] XSS - EP.1 (Task 1~3). END.

 

[TryHackMe] XSS - EP.2 (Task 4~5). Continue...

https://anbymata.tistory.com/58

 

[THM] XSS - EP.2 (Task 4~5)

TryHackMe - "XSS". Task 4~5. Write-up + Extra Study!출처: https://tryhackme.com/room/axss XSSExplore in-depth the different types of XSS and their root causes.tryhackme.com [4] Reflected XSS- Reflected XSS = malicious(악성) script가 사용자 브라

anbymata.tistory.com

'TryHackMe > Web Hacking' 카테고리의 다른 글

[THM] XSS - EP.3 (Task 6~7)  (0) 2026.03.06
[THM] XSS - EP.2 (Task 4~5)  (0) 2026.03.03
[THM] SQL Injection - EP.3 (Task 6~10). 完  (0) 2026.02.16
[THM] SQL Injection - EP.2 (Task 4~5)  (0) 2026.02.07
[THM] SQL Injection - EP.1 (Task 1~3)  (1) 2026.02.02