XSS
요약
- 사용자로부터 입력받은 데이터를 검증 및 Escape 처리하지 않을 경우 발생하는 취약점
- 사용자 브라우저로 악성 스크립트 전송 후, 악성 행위 수행
상세 설명
- 웹 서비스를 대상으로, 악성 스크립트를 삽입해 공격자가 원하는 행위를 수행하는 취약점 유형이다.
- 해당 취약점을 이용해 세션과 같은 인증정보 탈취 및 사용자 행동 추적, 민감정보 수집, 웹 서비스 기능 임의 조작 등의 공격을 수행할 수 있다.
- XSS 취약점은 3개의 유형으로 분류되는데
반사형, 저장형, DOM 기반형이 있다.
XSS 취약점 탐색 및 식별
- 웹 서비스로부터 XSS 취약점을 식별한 경우, 악성 스크립트가 삽입된 URL을 임의 사용자를 대상으로 배포
- 임의 사용자가 악성 스크립트에 접근했을 때, 삽입한 악성 스크립트 발생으로 인한 XSS 취약점 발생
XSS를 이용한 악성 행위

XSS 공격 방법
- HTML 태그 및 Event Handler를 이용하여, XSS 취약점 공격 수행
- 웹 페이지 조작 및 사용자 인터렉션에 악용되는 항목
HTML 태그
- 웹 페이지의 구조 정의
- HTML 태그를 이용해 javaScript 코드 실행 및 동적 기능 추가
- 특정 태그들을 통해 외부 스크립트 삽입 및 의도하지 않은 요청 수행
Document Object
- 웹 페이지 요소 접근 및 조작에 사용되는 API
- document.{속성} 형식으로 사용
- Session Hijacking, Redirection 등에 사용
Event Handler
- 웹 페이지에서 발생하는 이벤트에 반응하는 JavaScript 함수(이벤트는 클릭 등)
- 사용자의 행동 추적 및 민감정보 탈취에 사용
- 이벤트 핸들러에서
on__에 사용
HTML TAG
script -> JavaScript 코드로, 동적 기능 추가
img -> 이미지 삽입
svg -> 벡터 그래픽 삽입(이미지)
iframe -> 다른 프레임 삽입
video -> 비디오 파일 삽입
button -> 버튼 삽입
body -> 본문 컨텐츠
alert -> 알림 화면 출력
prompt -> 입력 메시지 화면 출력
console -> 개발자 도구에 출력
confirm -> 선택 화면 출력
print -> 인쇄 화면 출력
document.cookie -> 쿠키 값 출력
document.domain -> 도메인 출력
document.contentType -> 문서 타입 출력
document.documentURI -> 문서 위치 출력
document.write -> 작성 및 출력
onerror -> 읽는 중 오류 발생 시, 발생
onload -> 페이지가 처음 읽힐 때, 발생
onfocus -> Input 요소에 포커스 될 때, 발생
onclick -> 마우스 클릭 시, 발생
onmouseover -> 요소에 포인터 올릴 때, 발생
XSS 취약점의 유형
반사형(Reflected)
- 악성 스크립트가 삽입된 URL에 접근했을 때, 즉시 반영되어 실행되는 경우
- 악성 스크립트가 삽입된 요청 전송 시, 서버에서 요청 값에 대한 응답 값 출력 및 취약점 발생
상세설명
- URL과 같이 사용자 요청에 의해 발생하는 유형으로, 공격 수행을 위해 피해자에게 악성스크립트가 포함된 URL에 접속하도록 유도해야 한다.
- 웹 서비스 검색 기능 사용 시, 입력 값에 대한 결과를 서버에서 사용자에게 반환한다. 이때, 검색 결과를 응답에 포함될 때 악성스크립트가 포함된 경우 Reflected XSS 취약점이 발생할 수 있다.
- 악성 URL을 피해자가 알 수 없게 전달하는 방법은 다른 취약점과 연계할 수 있으며, 여러 방법이 존재한다.

웹서비스 접근 시, 파라미터 입력 값에 의한 스크립트 삽입 및 실행 취약점
- 사용자가 입력한 스크립트가 검증 없이 웹 서비스에 포함되는 경우 공격 수행
- 서버에 저장되지 않는 유형
저장형(Stored)
요약
- 악성스크립트가 서버에 저장되는 경우, 저장된 값을 불러올 때 스크립트 발생
상세 설명
- 웹 서비스에 저장된 정보를 조회할 때 발생하는 유형으로, 피해자가 악성스크립트가 저장된 위치에 접근했을 때 취약점이 발생한다.
- 서버의 DB, 파일, 특정 기능 등의 형태로 저장된 정보를 조회할 때 발생하며, 주로 게시글, 댓글, 계정정보 등에 업로드하는 방식이 존재한다.
- 저장된 악성 스크립트는 불특정 다수를 대상으로 공격을 수행할 수 있어, 낮은 난이도에 비해 높은 파급력을 갖는다.

악성 스크립트가 저장된 게시글, 파일 등 접근 시, 스크립트 삽입 및 실행 취약점
❗️checkpoint❗️
1) 게시판 내, 악성 스크립트 삽입
2) 저장된 악성 스크립트 삽입 및 발생 여부 확인(DB, 게시판)
예시 payload
<script>alert(document.domain)</script>
<img/src/onerror=prompt(document.domain)>
<svg/onload=print(document.domain)>
...
DOM-Based(Document Object Model-Based)
요약
- 문서 객체 모델을 통해 동적 생성된 웹 서비스의 Client-Side에서 발생
- 입력한 스크립트가, 웹 브라우저에서 처리되는 경우에 실행
- 서버에서 응답하지 않으며, URL의 데이터를 통해 실행
상세 설명
- URL과 같이 사용자 요청에 의해 발생하는 유형으로, 공격 수행을 위해 피해자에게 악성스크립트가 포함된 URL에 접속하도록 유도해야 한다.
- 웹 서비스 client-Side에서 JavaScript 코드가 동적 실행되는 과정에서, 입력 값이 발생하는 경우 DOM XSS 취약점이 발생한다.
- 입력 값에 대한 결과는 Client에게 반환하거나, 서버로 전송되지 않는다.

취약점 응용
Redirect
요약
- XSS 취약점 발생 시, 공격자가 삽입한 임의 사이트로 이동
- 정교하게 작성된 피싱 사이트 유도를 통한 정보 탈취 공격 수행
- 임의 사이트로 특정 데이터를 전송하는 공격 수행
상세 내용
1) 악성 스크립트 삽입 시, 임의 URL 입력
2) 악성 URL 접근 시, 피싱 사이트 및 공격자가 삽입한 위치로 이동
3) HTML Tags 중, location.href 사용
공격 구조

Session Hijacking
요약
- XSS 취약점 발생 시, 접근한 사용자/관리자 세션을 공격자 서버로 탈취
- 세션 탈취 공격을 통한, 계정 및 정보 탈취
상세 내용
1) 세션탈취 악성 스크립트 삽입 및 배포
2) 악성 스크립트 삽입 URL 접근 시, 세션탈취
3) 공격자 서버로 탈취한 세션정보 전송 및 로그인
공격 구조

Vulnerability Chaining
요약
- CSRF, 임의 기능 실행 등과 같이 다른 취약점과 연계하여 공격
- 공격자가 삽입한 임의 기능 수행 및 정보 탈취
상세 내용
1) 사용자 권한으로, 임의 기능 실행 및 접근 경로 정보 탈취
2) 공격 흔적을 최소화한, 악성 스크립트 삽입 및 실행
3) CSRF 등의 취약점과 연계
공격 구조

fetch 함수
1) JavaScript 함수를 이용한, 원격 API 호출
2) Method(GET, POST, PUT, DELETE) 사용 및 요청
3) alert(), Redirect 없이 공격 수행
기본 구조
fetch(url, option)
.then((response) => console.log("response:", response))
.catch((error) => console.log("error:", error));
출처: Stealien 임필호 팀장님