3. Websicherheit / Web Security · 실제 시험 Abschnitt 3.3
3.3. Cross-Site Scripting (XSS)
Persistent XSS의 세 참여자 흐름과 reflected XSS 차이를 시험지 1–2번 순서로 학습합니다.
이 페이지는 비슷한 주제를 임의로 다시 묶지 않고 실제 시험지의 Chapter → subsection → 소문제 순서를 그대로 따릅니다.
ACTUAL EXAM · VERBATIM TRANSCRIPT
시험지 원문 1:1 전사
아래 내용은 해설자가 바꿔 쓴 요약이 아닙니다. 실제 시험 전사본의 문장·순서·수치·배점·코드·표를 그대로 두고, Markdown 기호만 읽기 쉬운 제목·표·코드 모양으로 표시했습니다.
3.3. Cross-Site Scripting (XSS) (8 Punkte)
1. Beschreiben Sie den Ablauf eines persistenten XSS-Angriffs. Vervollständigen und beschriften Sie dazu folgende Skizze mit (von links nach rechts) Opfer, Server, Angreifer: (6 Punkte)
[Opfer] [Server] [Angreifer]2. Was ist der Unterschied zwischen einem persistenten und einem reflektierten XSS Angriff? Was kann ein Angreifer nach erfolgreichem XSS Angriff tun? (2 Punkte)
근거: CSS_Altklausur_WiSe_2526.pdf 및 computersystemsicherheit_wise25-26_questions_only.md · Abschnitt 3.3
VISUAL MAP
Persistent XSS의 세 참여자 왼쪽에서 오른쪽으로 읽은 뒤 아래 실제 소문제에서 같은 순서를 반복합니다.- 01 Angreifer payload
- 02 Server 저장
- 03 Opfer 페이지 요청
- 04 Payload 전달
- 05 Opfer browser 실행
FIXED SOLVING METHOD
이 묶음의 고정 풀이 순서
- 공격자·서버·피해자를 정확한 위치에 둡니다.
- 공격자가 payload를 server에 저장하는 화살표를 그립니다.
- 피해자가 감염된 page를 요청하는 화살표를 그립니다.
- Server가 payload 포함 HTML을 반환함을 표시합니다.
- 피해자 origin에서 실행되는 결과와 reflected XSS의 비저장 경로를 비교합니다.
ZERO-BASE CONCEPT LESSONS
이 묶음을 풀기 전에 필요한 개념
카드를 열고 닫는 방식 대신 한 방향으로 이어지는 글로 구성했습니다. 비유 → 용어의 쉬운 뜻 → 실제 작동 → 시험에서의 경계 순서로 천천히 읽으세요.
기초 개념 01
XSS와 output encoding을 처음부터 이해하기
먼저 장면으로 이해해 봅시다. 설문 답변 칸에 쓴 문장을 사회자가 그대로 읽어야 하는데, 답변이 무대 지시문으로 해석되어 조명과 문을 조작하는 상황과 같다.
이제 전문 용어를 붙이면 다음과 같습니다. XSS은(는) 공격자 입력이 victim browser에서 data가 아니라 HTML 또는 JavaScript code로 실행되는 취약점입니다. Source은(는) 공격자 입력이 들어오는 URL, form, database record 같은 시작점입니다. Sink은(는) 입력이 HTML이나 script로 해석될 수 있는 위험한 사용 지점입니다. Output encoding은(는) 출력 context에서 특수문자가 code 문법이 아니라 data로 표현되도록 변환하는 방어입니다.
실제 시스템에서는 이렇게 작동합니다. Cross-Site Scripting(XSS)은 공격자 입력이 피해자 browser에서 신뢰된 사이트의 HTML 또는 JavaScript로 해석되어 실행되는 취약점이다. Reflected XSS는 request의 입력이 곧바로 response에 반사되는 형태다. 방어의 핵심은 출력 위치에 맞는 output encoding으로 특별한 문자를 데이터로만 해석하게 만드는 것이다.
- $_GET 같은 사용자 입력 source를 찾는다.
- echo처럼 HTML response에 쓰는 sink를 찾는다.
- HTML body, attribute, URL, JavaScript 중 context를 판별한다.
- 해당 context용 encoding과 안전한 template API를 적용한다.
여기서 넘지 말아야 할 경계: SQL injection 방어인 prepared statement를 XSS의 직접 해결책으로 쓰거나 client-side filter만 믿으면 안 된다.
17. XSS·Output encoding 독립 강의 →기초 개념 02
Browser, server, HTTP, HTML parser
먼저 장면으로 이해해 봅시다. 같은 기호도 일반 편지 본문에서는 글자지만 계산식 칸에서는 연산자로 읽힌다. Browser도 입력이 HTML text, attribute, script 중 어디에 들어갔는지에 따라 다르게 해석한다.
이제 전문 용어를 붙이면 다음과 같습니다. HTTP request은(는) Browser나 client가 server에 method, path, headers, body를 담아 보내는 message입니다. HTTP response은(는) Server가 status, headers, body를 담아 client에 돌려주는 message입니다. Parser / Interpreter은(는) 문자열을 HTML, JavaScript, SQL, shell 같은 문법으로 해석하는 구성요소입니다. Context은(는) 같은 문자가 어느 문법의 어느 위치에 놓였는지를 뜻하며 올바른 encoding 방법을 결정합니다.
실제 시스템에서는 이렇게 작동합니다. Browser는 사용자의 client 프로그램이고 web server는 request를 받아 response를 만드는 프로그램이다. HTTP request에는 method, URL, header, body가 있고 response에는 status, header, body가 있다. Browser는 response body를 단순 글자가 아니라 HTML, JavaScript 같은 문법으로 해석(parse)한다. 외부 입력이 처음 들어오는 곳을 source, 그 입력이 실제 기능에 사용되는 위험한 도착점을 sink라고 부른다. 따라서 입력이 어느 문법 위치와 sink에 들어가는지가 보안에 매우 중요하다.
- 사용자 입력이 들어오는 source를 찾는다.
- 입력이 출력·DB·명령으로 들어가는 sink를 찾는다.
- 그 sink를 어떤 parser가 어떤 context로 읽는지 확인한다.
- 공격 영향과 context에 맞는 방어를 연결한다.
여기서 넘지 말아야 할 경계: 입력 문자열 자체만 보고 취약점을 이름 붙이지 말고 source에서 sink까지 실제 흐름을 추적한다.
15. HTTP request·GET·POST·TLS 독립 강의 →ACTIVE RECALL
이 페이지를 닫기 전 확인
- Stored XSS에서 payload는 어디에 남나요?
- 실제 실행 주체는 누구의 Browser인가요?
- Reflected XSS는 어떤 전달 유도가 필요한가요?
QUESTION-BY-QUESTION COMMENTARY
실제 시험 소문제별 해설
시험지의 번호와 순서를 그대로 유지했습니다. 각 항목을 열어 원문 → 쉬운 개념 설명 → 이번 문제의 단계별 풀이 → 답안 → 함정 순서로 읽으세요.
ACTUAL EXAM SUBSECTION 3.3
3.3. Cross-Site Scripting (XSS)
2개 학습 항목 · 8점
3.3.1 피해자–서버–공격자 사이 persistent XSS의 흐름을 설명하시오. 기존 71문항 학습 번호 52 · 6점 프로토콜 추적
3.3.1 · 실제 시험 원문
한국어로 요구사항만 풀어 읽기
피해자–서버–공격자 사이 persistent XSS의 흐름을 설명하시오.
TERMS FOR 3.3.1
이 소문제의 중요한 용어부터 이해하기
전문 용어를 알고 있다고 가정하지 않습니다. 아래 정의의 굵은 용어를 문제 문장 속 같은 단어와 바꾸어 읽은 뒤 풀이로 넘어가세요.
공격자 입력이 피해자 Browser에서 해당 site의 script로 실행되는 취약점입니다.
작은 예: 사용자 이름이 HTML에 escape 없이 들어가면 입력한 tag와 event handler가 실행될 수 있습니다.
공격 payload가 server나 database에 저장되었다가 여러 피해자에게 전달되는 XSS입니다.
작은 예: 공격자가 게시글에 payload를 저장하면 그 글을 보는 사용자의 Browser에서 실행됩니다.
공격자 입력이 들어오는 URL, form, database record 같은 시작점입니다.
입력이 HTML이나 script로 해석될 수 있는 위험한 사용 지점입니다.
출력 context에서 특수문자가 code 문법이 아니라 data로 표현되도록 변환하는 방어입니다.
Browser나 client가 server에 method, path, headers, body를 담아 보내는 message입니다.
Server가 status, headers, body를 담아 client에 돌려주는 message입니다.
문자열을 HTML, JavaScript, SQL, shell 같은 문법으로 해석하는 구성요소입니다.
이 소문제만을 위한 0부터 시작하는 미니 강의
아래 설명은 이 과목의 선행 지식을 가정하지 않습니다. 개념 → 비유의 대응 → 눈으로 읽는 구조 → 작은 예제 순서로 읽은 뒤 실제 시험 풀이로 넘어가세요.
1 · 먼저 알아야 할 개념
Persistent XSS 또는 Stored XSS는 공격 payload가 server의 database, 게시글, profile 같은 저장소에 남았다가 나중의 page response에 반복 포함되는 공격입니다. 공격 순간과 실행 순간이 서로 다른 request일 수 있다는 점이 핵심입니다.
시험 그림의 위치는 왼쪽부터 Opfer(피해자), Server, Angreifer(공격자)입니다. 공격자는 오른쪽에서 가운데 server로 악성 content를 제출하고, 피해자는 왼쪽에서 감염된 정상 page를 요청합니다. Server가 저장 payload를 encoding 없이 HTML에 넣어 왼쪽 피해자에게 돌려보냅니다.
Payload는 server에서 JavaScript로 실행되는 것이 아니라 피해자 browser가 response를 parse할 때 취약 site의 origin 권한으로 실행됩니다. 그래서 page DOM과 같은-origin data에 접근하거나 피해자의 인증 상태로 request를 보낼 수 있습니다. Cookie 직접 읽기는 해당 cookie가 HttpOnly가 아닐 때만 가능합니다.
직접 수정은 저장 시점의 막연한 blacklist보다 출력 위치에 맞는 encoding입니다. 제한된 HTML을 허용해야 한다면 검증된 sanitizer를 사용하고, CSP는 추가 피해를 제한하는 방어층으로 둡니다.
2 · 일상 장면으로 먼저 잡기
공격자가 공용 게시판 벽에 ‘이 글을 읽는 사람은 자기 열쇠로 특정 문을 열라’는 위험한 지시를 붙여 두는 상황입니다.
비유의 경계 사람은 글을 읽고 선택할 수 있지만 browser parser는 정해진 문법대로 자동 처리합니다. 또한 실제 XSS 영향은 CSP, HttpOnly, 권한, endpoint 보호에 따라 달라집니다.
악성 게시글·comment payload 제출
Payload를 persistent하게 저장
감염된 정상 page를 나중에 요청
저장 payload가 포함된 HTML response
취약 site origin으로 payload 실행
조건에 따라 data 유출·행동 결과 전달
실제 시험 그림에서는 왼쪽 Opfer, 가운데 Server, 오른쪽 Angreifer를 유지하고 화살표 방향을 명시합니다.
게시글에 저장된 event handler가 다음 방문자에게 실행되는 과정
주어진 것과 목표 Forum은 comment 내용을 DB에 그대로 저장한 뒤
<div class="comment">USER_CONTENT</div>안에 encoding 없이 출력합니다. 공격자는 image error event를 이용한 payload를 comment로 제출합니다.오른쪽 Angreifer에서 가운데 Server로 악성 comment 제출 화살표를 그립니다.
왜? Persistent XSS의 첫 조건은 payload가 server-side 저장소에 들어가는 것이기 때문입니다.
중간 결과 Server가 payload를 comment row로 DB에 저장합니다.
시간이 지난 뒤 왼쪽 Opfer에서 Server로 forum page 요청 화살표를 그립니다.
왜? 피해자는 공격용 특수 URL이 아니라 정상 page를 열 수 있음을 보여 주기 위해서입니다.
중간 결과 Server는 해당 comment가 포함된 page를 생성하기 시작합니다.
Server가 저장 payload를 HTML comment 위치에 그대로 넣습니다.
왜? Data가 HTML code로 재해석되는 취약한 경계를 확인하기 위해서입니다.
중간 결과 Response에는 공격자의 element와 event handler가 실제 markup으로 포함됩니다.
가운데 Server에서 왼쪽 Opfer로 payload 포함 response 화살표를 그립니다.
왜? 실행 code가 어떤 경로로 피해자에게 도착하는지 표시하기 위해서입니다.
중간 결과 피해자 browser가 취약한 forum origin의 문서로 response를 받습니다.
피해자 browser의 HTML parser와 JavaScript engine 동작을 적습니다.
왜? 실행 위치가 server가 아니라 Opfer임을 명확히 하기 위해서입니다.
중간 결과 Event handler가 forum origin 권한으로 실행되어 DOM을 바꾸거나 피해자 대신 same-origin request를 보낼 수 있습니다.
필요하다면 Opfer에서 Angreifer로 결과 화살표를 추가합니다.
왜? 공격자가 얻는 최종 영향을 그림에 완성하기 위해서입니다.
중간 결과 Non-HttpOnly data, 입력값 또는 page data가 공격자 endpoint로 유출될 수 있습니다.
예제 결론 Persistent XSS의 기억할 순서는 공격자 저장 → 피해자 정상 요청 → server의 payload 포함 응답 → 피해자 browser 실행입니다.
실제 시험으로 옮기기 6점 그림에는 세 참여자 label뿐 아니라 저장, 정상 page 요청, payload 포함 응답, browser 실행·영향의 방향과 설명을 모두 넣습니다.
이번 문제는 이 단계로 풀어야 했습니다
먼저 문제에서 직접 주어진 값과 최종적으로 구할 값을 분리합니다. 그다음 각 값·용어·경로를 왜 선택했는지 확인하며, 앞 단계의 중간 결과를 다음 단계의 입력으로 사용합니다.
먼저 문제를 식과 조건으로 정리하기
계산을 시작하기 전에 주어진 것과 구할 것을 분리합니다. 그다음 아래 관계식을 위에서 아래로 사용하면, 숫자가 어디서 왔는지 놓치지 않을 수 있습니다.
강사가 문제의 요구사항을 쉬운 말로 바꾸면
시험 문장이 요구하는 것: 피해자–서버–공격자 사이 persistent XSS의 흐름을 설명하시오.
이 문제의 풀이 전략: 이 소문제에서는 세 참여자를 정확히 배치한다 → 저장 화살표를 먼저 그린다 → 피해자의 정상 요청을 그린다 → Payload 포함 응답을 그린다 → 실행 위치와 권한을 쓴다 → 영향과 조건을 마무리한다 순서로 진행합니다. 마지막에는 ‘Persistent 답안의 첫 화살표에는 반드시 Angreifer → Server/DB ‘저장’을 넣습니다.’라는 교정 기준으로 답을 다시 확인합니다.
문제에서 주어진 정보
피해자–서버–공격자 사이 persistent XSS의 흐름을 설명하시오.
왼쪽 Opfer, 가운데 Server, 오른쪽 Angreifer로 label합니다.
시험이 요구한 좌우 순서를 바꾸지 않았는지 봅니다.
최종적으로 구해야 하는 것
DOM·page data 조작, 피해자 대신 request, non-HttpOnly cookie·입력 탈취 등이 가능하다고 씁니다.
Angreifer가 악성 payload를 Server에 제출하고 DB 등에 저장시킵니다. 이후 Opfer가 그 정상 page를 요청하면 Server가 저장 payload를 HTML에 포함해 응답합니다. Opfer의 browser가 이를 취약 site의 origin에서 script로 실행해 DOM을 바꾸거나 사용자 대신 request를 보내고, 조건에 따라 data를 Angreifer에게 유출할 수 있습니다. 이 저장 단계가 reflected XSS와의 핵심 차이입니다.
사용할 공식·판정 관계
세 참여자를 정확히 배치한다 → 저장 화살표를 먼저 그린다 → 피해자의 정상 요청을 그린다 → Payload 포함 응답을 그린다 → 실행 위치와 권한을 쓴다 → 영향과 조건을 마무리한다
실제 시험 그림에서는 왼쪽 Opfer, 가운데 Server, 오른쪽 Angreifer를 유지하고 화살표 방향을 명시합니다.
세 참여자를 정확히 배치한다
구체적으로 왼쪽 Opfer, 가운데 Server, 오른쪽 Angreifer로 label합니다.
여기서 검산 시험이 요구한 좌우 순서를 바꾸지 않았는지 봅니다.
다음 단계로 여기서 확인한 내용을 다음 ‘저장 화살표를 먼저 그린다’ 단계의 출발점으로 사용합니다.
저장 화살표를 먼저 그린다
구체적으로 Angreifer → Server: 악성 payload를 게시글·comment로 제출하고 Server/DB가 저장합니다.
여기서 검산
persistent를 증명하는 저장 단계가 포함됐는지 확인합니다.다음 단계로 여기서 확인한 내용을 다음 ‘피해자의 정상 요청을 그린다’ 단계의 출발점으로 사용합니다.
피해자의 정상 요청을 그린다
구체적으로 Opfer → Server: 피해자가 감염된 page를 평범하게 요청합니다.
여기서 검산 매번 공격자가 특수 link를 직접 보내야 한다고 쓰지 않습니다.
다음 단계로 여기서 확인한 내용을 다음 ‘Payload 포함 응답을 그린다’ 단계의 출발점으로 사용합니다.
Payload 포함 응답을 그린다
구체적으로 Server → Opfer: 저장 content가 encoding 없이 HTML response에 포함됩니다.
여기서 검산 Server가 payload를 실행한다고 표시하지 않습니다.
다음 단계로 여기서 확인한 내용을 다음 ‘실행 위치와 권한을 쓴다’ 단계의 출발점으로 사용합니다.
실행 위치와 권한을 쓴다
구체적으로 Opfer browser가 취약 site origin에서 script를 실행합니다.
여기서 검산 Browser와 origin이라는 두 핵심어가 있는지 봅니다.
다음 단계로 여기서 확인한 내용을 다음 ‘영향과 조건을 마무리한다’ 단계의 출발점으로 사용합니다.
영향과 조건을 마무리한다
구체적으로 DOM·page data 조작, 피해자 대신 request, non-HttpOnly cookie·입력 탈취 등이 가능하다고 씁니다.
여기서 검산 HttpOnly cookie도 반드시 읽을 수 있다고 과장하지 않습니다.
다음 단계로 앞 단계의 결과를 모아 채점 가능한 최종 답안으로 정리합니다.
정답과 해설
① 공격자가 악성 payload를 서버에 저장한다. ② 피해자가 해당 페이지를 요청한다. ③ 서버가 저장된 payload를 HTML에 포함해 응답한다. ④ 피해자 browser가 신뢰 origin의 script로 실행한다. ⑤ session/행위가 공격자에게 악용될 수 있다.
시험 답안 골격
정답이 이렇게 되는 이유
Angreifer가 악성 payload를 Server에 제출하고 DB 등에 저장시킵니다. 이후 Opfer가 그 정상 page를 요청하면 Server가 저장 payload를 HTML에 포함해 응답합니다. Opfer의 browser가 이를 취약 site의 origin에서 script로 실행해 DOM을 바꾸거나 사용자 대신 request를 보내고, 조건에 따라 data를 Angreifer에게 유출할 수 있습니다. 이 저장 단계가 reflected XSS와의 핵심 차이입니다.
초보자가 가장 자주 뒤집는 지점
잘못된 생각 Persistent XSS에서도 공격자가 피해자마다 payload가 든 특수 URL을 보내고 server는 저장하지 않는다.
왜 틀렸나 그 흐름은 request 입력이 즉시 response에 돌아오는 reflected XSS에 가깝습니다.
고쳐 말하면 Persistent 답안의 첫 화살표에는 반드시 Angreifer → Server/DB ‘저장’을 넣습니다.
한 문제만 더: 개념이 정말 연결됐는지 확인
질문 Persistent XSS payload가 실행되는 컴퓨터는 일반적으로 Server입니까, Opfer의 browser입니까?
정답 Opfer의 browser입니다. Server는 저장 payload를 response에 넣어 전달하고 browser가 HTML/JavaScript로 해석합니다.
이 문제의 오답 함정
이 소문제를 점수로 바꾸는 6개의 작은 훈련
해설을 닫은 상태에서 1번부터 수행하세요. 정답을 읽은 직후보다 직접 문제 지도를 만들고 답을 꺼낸 뒤 채점할 때 기억이 더 정확해집니다. 작성 내용과 복습 판정은 이 브라우저에 자동 저장됩니다.
해설을 보지 말고 주어진 정보 → 구할 것 → 사용할 공식·판정 관계를 한 줄씩 복원하세요.
막힐 때만 첫 단서 열기
게시판 벽에 위험한 명령을 붙여 두면, 링크를 따로 보낼 필요 없이 그 벽을 보는 모든 사람의 브라우저가 명령을 읽는 구조다.
피해자–서버–공격자 사이 persistent XSS의 흐름을 설명하시오.
정답 문장만 말하지 말고 근거·중간값·메시지 흐름 중 이 문항에 필요한 것을 빈 종이에 남기세요.
작성한 뒤에만 아래 기준을 열고, 실제로 쓴 항목만 체크하세요.
답안 작성 후 채점 기준 열기
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/4 slots
조건 변형: 흐름의 중간 메시지·광고·표 행 하나를 제거하거나 공격자가 바꿨다고 가정하세요. 바로 다음 상태가 무엇인지 sender, receiver, content, security impact 순서로 추적하세요.
고칠 답안: 공격자가 피해자에게 매번 특수 링크를 보내야 한다고 쓰면 reflected XSS 흐름이다.
복구 힌트: 게시판 벽에 위험한 명령을 붙여 두면, 링크를 따로 보낼 필요 없이 그 벽을 보는 모든 사람의 브라우저가 명령을 읽는 구조다.
오답의 첫 잘못된 전제를 한 줄로 지우고, 올바른 조건과 결론을 두 줄로 다시 쓰세요.
채점 전 예상과 실제 채점 결과가 달랐는지 확인한 뒤 상태를 남기세요. ‘숙달’은 근거와 중간 과정까지 무힌트로 재현했을 때만 선택합니다.
모든 훈련을 마친 뒤 핵심 정답 다시 확인
① 공격자가 악성 payload를 서버에 저장한다. ② 피해자가 해당 페이지를 요청한다. ③ 서버가 저장된 payload를 HTML에 포함해 응답한다. ④ 피해자 browser가 신뢰 origin의 script로 실행한다. ⑤ session/행위가 공격자에게 악용될 수 있다.
3.3.2 persistent XSS와 reflected XSS의 차이 및 성공 후 가능한 공격은? 기존 71문항 학습 번호 53 · 2점 정의 비교
3.3.2 · 실제 시험 원문
한국어로 요구사항만 풀어 읽기
persistent XSS와 reflected XSS의 차이 및 성공 후 가능한 공격은?
TERMS FOR 3.3.2
이 소문제의 중요한 용어부터 이해하기
전문 용어를 알고 있다고 가정하지 않습니다. 아래 정의의 굵은 용어를 문제 문장 속 같은 단어와 바꾸어 읽은 뒤 풀이로 넘어가세요.
공격자 입력이 피해자 Browser에서 해당 site의 script로 실행되는 취약점입니다.
작은 예: 사용자 이름이 HTML에 escape 없이 들어가면 입력한 tag와 event handler가 실행될 수 있습니다.
한 request의 입력이 같은 response에 즉시 반사되어 실행되는 XSS입니다.
작은 예: 공격자가 payload가 든 link를 피해자에게 클릭하게 만들 수 있습니다.
공격자 입력이 들어오는 URL, form, database record 같은 시작점입니다.
입력이 HTML이나 script로 해석될 수 있는 위험한 사용 지점입니다.
출력 context에서 특수문자가 code 문법이 아니라 data로 표현되도록 변환하는 방어입니다.
Browser나 client가 server에 method, path, headers, body를 담아 보내는 message입니다.
Server가 status, headers, body를 담아 client에 돌려주는 message입니다.
문자열을 HTML, JavaScript, SQL, shell 같은 문법으로 해석하는 구성요소입니다.
이 소문제만을 위한 0부터 시작하는 미니 강의
아래 설명은 이 과목의 선행 지식을 가정하지 않습니다. 개념 → 비유의 대응 → 눈으로 읽는 구조 → 작은 예제 순서로 읽은 뒤 실제 시험 풀이로 넘어가세요.
1 · 먼저 알아야 할 개념
Persistent XSS와 reflected XSS는 모두 신뢰하지 않는 data가 browser에서 active code로 해석된다는 공통점을 가집니다. 차이를 묻는 가장 안정적인 기준은 payload의 server-side 저장 여부와 피해자에게 전달되는 경로입니다.
Persistent XSS에서는 payload가 DB나 profile에 남고 이후의 정상 page 조회마다 response에 들어갈 수 있습니다. 공격자는 피해자마다 별도 link를 보낼 필요가 없고, 인기 게시글 하나가 여러 방문자를 공격할 수 있습니다.
Reflected XSS에서는 request의 query·form 입력이 저장되지 않고 같은 response에 즉시 반사됩니다. 공격자는 보통 payload가 URL에 포함된 link를 피해자가 열게 해야 합니다. 앞 3.2의 line 9처럼 실패한 username을 바로 echo하는 경우가 실제 시험 속 reflected 예입니다.
성공한 script는 취약 site origin의 권한을 얻어 DOM·form input·page data를 읽거나 바꾸고 사용자를 대신해 same-origin request를 보낼 수 있습니다.
document.cookie로 session 값을 읽는 것은 cookie가 HttpOnly가 아닐 때만 가능하지만, HttpOnly여도 browser가 cookie를 자동 첨부하는 요청 대행은 가능할 수 있습니다.2 · 일상 장면으로 먼저 잡기
Persistent XSS는 공공 벽에 계속 붙은 위험한 전단이고 reflected XSS는 피해자에게만 보낸 거울 달린 특수 초대장이라고 생각해 봅시다.
비유의 경계 DOM-based XSS는 payload 처리 위치에 관한 또 다른 분류축이며 stored/reflected와 완전히 배타적인 이름표가 아닐 수 있습니다. 이 시험에서는 저장 여부와 전달 경로 비교에 집중합니다.
Angreifer가 payload를 게시글·profile에 저장
정상 page 조회 때 여러 response에 반복 포함
Payload가 query·form request에 포함
같은 request의 response에 즉시 반사
Opfer browser가 취약 site origin으로 실행
앞부분의 저장·전달 방식은 다르지만 마지막 browser 실행 지점은 같습니다.
같은 payload를 comment와 login error에 넣어 비교하기
주어진 것과 목표 Payload는
<img src=x onerror=...>이고, 사이트에는 comment 저장 기능과 시험의 GET login 실패 message가 있습니다.Payload를 comment로 한 번 제출합니다.
왜? Server-side 저장 여부를 첫 비교축으로 삼기 위해서입니다.
중간 결과 DB에 남아 이후 그 게시글을 여는 여러 사용자의 response에 반복 포함되므로 persistent XSS입니다.
같은 payload를 시험 login의 user query parameter에 넣습니다.
왜? 저장 없는 즉시 반사 경로를 확인하기 위해서입니다.
중간 결과 9행의 실패 response에 한 번 되돌아오고 DB에는 content로 저장되지 않으므로 reflected XSS입니다.
피해자 도달 방식의 차이를 적습니다.
왜? 시험이 묻는 유형 차이를 전달 경로까지 설명하기 위해서입니다.
중간 결과 Persistent는 정상 게시글 조회로 도달하고 reflected는 보통 공격자가 조작 link를 열게 해야 합니다.
두 response를 browser parser 관점에서 비교합니다.
왜? 유형이 달라도 최종 실행 원리는 같음을 확인하기 위해서입니다.
중간 결과 둘 다 encoding이 없다면 피해자 browser가 payload를 취약 origin의 code로 실행합니다.
실행 후 가능한 동작을 조건과 함께 두 가지 고릅니다.
왜? 시험의 두 번째 질문에 과장 없이 답하기 위해서입니다.
중간 결과 DOM 변조와 피해자 대신 request를 보낼 수 있고, HttpOnly가 아닌 cookie나 form input도 탈취할 수 있습니다.
예제 결론 저장 여부가 유형을 나누고, 최종적으로 browser가 신뢰 origin에서 공격자 data를 code로 실행한다는 위험은 같습니다.
실제 시험으로 옮기기 2점 답안은 stored/반사 경로를 한 문장씩 대비하고 가능한 영향 둘을 조건부로 짧게 제시합니다.
이번 문제는 이 단계로 풀어야 했습니다
먼저 문제에서 직접 주어진 값과 최종적으로 구할 값을 분리합니다. 그다음 각 값·용어·경로를 왜 선택했는지 확인하며, 앞 단계의 중간 결과를 다음 단계의 입력으로 사용합니다.
먼저 문제를 식과 조건으로 정리하기
계산을 시작하기 전에 주어진 것과 구할 것을 분리합니다. 그다음 아래 관계식을 위에서 아래로 사용하면, 숫자가 어디서 왔는지 놓치지 않을 수 있습니다.
강사가 문제의 요구사항을 쉬운 말로 바꾸면
시험 문장이 요구하는 것: persistent XSS와 reflected XSS의 차이 및 성공 후 가능한 공격은?
이 문제의 풀이 전략: 이 소문제에서는 Persistent의 저장 여부를 쓴다 → Persistent의 피해자 경로를 쓴다 → Reflected의 저장 여부를 쓴다 → Reflected의 피해자 경로를 쓴다 → 공통 실행 권한을 적는다 → 영향을 조건부로 두 가지 이상 쓴다 순서로 진행합니다. 마지막에는 ‘유형은 payload 전달 경로로 나누고 실행 위치는 둘 다 Opfer browser로 표시합니다.’라는 교정 기준으로 답을 다시 확인합니다.
문제에서 주어진 정보
persistent XSS와 reflected XSS의 차이 및 성공 후 가능한 공격은?
Payload가 Server/DB에 저장되어 나중 response에 반복 포함됩니다.
`저장`과 `나중`이라는 두 요소가 있는지 확인합니다.
최종적으로 구해야 하는 것
DOM 변경, 사용자 대신 request, 입력·page data 탈취, non-HttpOnly cookie 읽기 등이 가능합니다.
Persistent XSS는 payload가 DB 등에 저장되어 정상 page를 여는 여러 피해자에게 반복 전달됩니다. Reflected XSS는 request의 입력이 저장 없이 같은 response에 즉시 반사되므로 보통 피해자가 조작된 link를 열어야 합니다. 성공하면 취약 site origin에서 DOM·form data를 조작하거나 읽고 사용자 대신 request를 보낼 수 있으며, HttpOnly가 아닌 cookie도 읽을 수 있습니다.
사용할 공식·판정 관계
Persistent의 저장 여부를 쓴다 → Persistent의 피해자 경로를 쓴다 → Reflected의 저장 여부를 쓴다 → Reflected의 피해자 경로를 쓴다 → 공통 실행 권한을 적는다 → 영향을 조건부로 두 가지 이상 쓴다
앞부분의 저장·전달 방식은 다르지만 마지막 browser 실행 지점은 같습니다.
Persistent의 저장 여부를 쓴다
구체적으로 Payload가 Server/DB에 저장되어 나중 response에 반복 포함됩니다.
여기서 검산
저장과나중이라는 두 요소가 있는지 확인합니다.다음 단계로 여기서 확인한 내용을 다음 ‘Persistent의 피해자 경로를 쓴다’ 단계의 출발점으로 사용합니다.
Persistent의 피해자 경로를 쓴다
구체적으로 피해자는 감염된 정상 page를 조회하는 것만으로 공격받을 수 있습니다.
여기서 검산 특수 link가 매번 필수라고 쓰지 않습니다.
다음 단계로 여기서 확인한 내용을 다음 ‘Reflected의 저장 여부를 쓴다’ 단계의 출발점으로 사용합니다.
Reflected의 저장 여부를 쓴다
구체적으로 Request 입력이 저장되지 않고 같은 response에 즉시 돌아옵니다.
여기서 검산 앞 code의 9행 login error를 예로 들 수 있는지 봅니다.
다음 단계로 여기서 확인한 내용을 다음 ‘Reflected의 피해자 경로를 쓴다’ 단계의 출발점으로 사용합니다.
Reflected의 피해자 경로를 쓴다
구체적으로 보통 공격자가 payload가 든 URL이나 form request를 피해자가 실행하도록 유도합니다.
여기서 검산 모든 reflected XSS가 자동으로 모든 방문자에게 전파된다고 쓰지 않습니다.
다음 단계로 여기서 확인한 내용을 다음 ‘공통 실행 권한을 적는다’ 단계의 출발점으로 사용합니다.
공통 실행 권한을 적는다
구체적으로 피해자 browser에서 취약 site origin의 script로 실행됩니다.
여기서 검산 Server-side code execution과 혼동하지 않습니다.
다음 단계로 여기서 확인한 내용을 다음 ‘영향을 조건부로 두 가지 이상 쓴다’ 단계의 출발점으로 사용합니다.
영향을 조건부로 두 가지 이상 쓴다
구체적으로 DOM 변경, 사용자 대신 request, 입력·page data 탈취, non-HttpOnly cookie 읽기 등이 가능합니다.
여기서 검산 HttpOnly cookie를 무조건 직접 읽는다고 단정하지 않습니다.
다음 단계로 앞 단계의 결과를 모아 채점 가능한 최종 답안으로 정리합니다.
정답과 해설
persistent XSS는 payload가 DB 등에 저장되어 정상 페이지 조회 때 반복 전달된다. reflected XSS는 request의 입력이 즉시 response에 반사되어 보통 피해자가 조작된 링크를 열어야 한다. 성공하면 DOM 변경, 사용자 대신 요청, 입력 탈취, HttpOnly가 아닌 cookie 탈취가 가능하다.
시험 답안 골격
정답이 이렇게 되는 이유
Persistent XSS는 payload가 DB 등에 저장되어 정상 page를 여는 여러 피해자에게 반복 전달됩니다. Reflected XSS는 request의 입력이 저장 없이 같은 response에 즉시 반사되므로 보통 피해자가 조작된 link를 열어야 합니다. 성공하면 취약 site origin에서 DOM·form data를 조작하거나 읽고 사용자 대신 request를 보낼 수 있으며, HttpOnly가 아닌 cookie도 읽을 수 있습니다.
초보자가 가장 자주 뒤집는 지점
잘못된 생각 Stored XSS는 server에서 code가 실행되고 reflected XSS만 browser에서 실행된다.
왜 틀렸나 저장 위치와 실행 위치를 혼동했습니다. 두 유형 모두 이 문맥에서는 최종적으로 피해자 browser에서 실행됩니다.
고쳐 말하면 유형은 payload 전달 경로로 나누고 실행 위치는 둘 다 Opfer browser로 표시합니다.
한 문제만 더: 개념이 정말 연결됐는지 확인
질문 공격자가 payload가 든 검색 URL을 피해자에게 보내고 검색 결과가 그 query를 즉시 그대로 출력한다면 어느 유형입니까?
정답 Reflected XSS입니다. Payload가 server에 content로 저장되지 않고 해당 request의 response에 바로 반사됩니다.
이 문제의 오답 함정
이 소문제를 점수로 바꾸는 6개의 작은 훈련
해설을 닫은 상태에서 1번부터 수행하세요. 정답을 읽은 직후보다 직접 문제 지도를 만들고 답을 꺼낸 뒤 채점할 때 기억이 더 정확해집니다. 작성 내용과 복습 판정은 이 브라우저에 자동 저장됩니다.
해설을 보지 말고 주어진 정보 → 구할 것 → 사용할 공식·판정 관계를 한 줄씩 복원하세요.
막힐 때만 첫 단서 열기
stored는 벽에 계속 붙어 있는 전단이고, reflected는 피해자에게 보낸 거울 달린 특수 링크다.
persistent XSS와 reflected XSS의 차이 및 성공 후 가능한 공격은?
정답 문장만 말하지 말고 근거·중간값·메시지 흐름 중 이 문항에 필요한 것을 빈 종이에 남기세요.
작성한 뒤에만 아래 기준을 열고, 실제로 쓴 항목만 체크하세요.
답안 작성 후 채점 기준 열기
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/3 slots
조건 변형: 두 개념을 권한, oracle/관찰 정보, 금지 조건, 성공 조건의 네 행으로 다시 비교하세요. 이름을 가려도 어느 쪽이 더 강한 모델인지 판별할 수 있어야 합니다.
고칠 답안: XSS가 곧바로 HttpOnly cookie를 읽는다고 단정하지 않는다.
복구 힌트: stored는 벽에 계속 붙어 있는 전단이고, reflected는 피해자에게 보낸 거울 달린 특수 링크다.
오답의 첫 잘못된 전제를 한 줄로 지우고, 올바른 조건과 결론을 두 줄로 다시 쓰세요.
채점 전 예상과 실제 채점 결과가 달랐는지 확인한 뒤 상태를 남기세요. ‘숙달’은 근거와 중간 과정까지 무힌트로 재현했을 때만 선택합니다.
모든 훈련을 마친 뒤 핵심 정답 다시 확인
persistent XSS는 payload가 DB 등에 저장되어 정상 페이지 조회 때 반복 전달된다. reflected XSS는 request의 입력이 즉시 response에 반사되어 보통 피해자가 조작된 링크를 열어야 한다. 성공하면 DOM 변경, 사용자 대신 요청, 입력 탈취, HttpOnly가 아닌 cookie 탈취가 가능하다.