| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- IR
- THM
- 해커
- XSS
- OverTheWire
- 보안 관제
- write-up
- 리눅스
- 해킹
- 모의해킹
- SoC
- Cross-Site Scripting
- web hacking
- 정보보호
- CTF
- 리눅스 기초
- 정보보안
- 해킹 스터디
- Blue Team
- Cyber Security
- 보안 스터디
- Bandit
- 사이버 보안
- cert
- linux
- http
- 블루팀
- Web
- TryHackMe
- 워게임
- Today
- Total
AnbyMata의 해킹 노트
[THM] XSS - EP.1 (Task 1~3) 본문
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 에서 가능합니다.

[2-2] 기본 JavaScript 함수들
1. alert() : 브라우저에서 JavaScript 경고창을 표시
- alert(1) = 숫자 `1`이 표시된 경고창이 나타남
- alert('XSS') or alert("XSS") = 문자열 `XSS`이 표시된 경고창이 나타남

= `alert('AnbyMata')`를 입력하고 Enter 키를 누르면 "AnbyMata" 텍스트를 가진 경고창이 나타납니다.
2. console.log() : 브라우저의 JS 콘솔에 값을 출력
- console.log(100) = 숫자 `100`이 콘솔에 출력됨
- console.log("XSS") = 문자열 `XSS`가 콘솔에 출력됨

= `console.log('AnbyMata')`를 입력하고 Enter 키를 누르면 콘솔에 "AnbyMata"가 출력됩니다.
3. btoa() / atob() = Base64 encoding(인코딩) / decoding(디코딩)
- btoa("XSS") = 문자열 `XSS`를 Base64로 인코딩 된 ASCII 문자열로 변환
- atob("asdf") = 인코딩된 ASCII 문자열을 원래대로 디코딩

= `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 |