모의해킹 | XSS

Aquila·2024년 8월 29일

SecurityAcademy

목록 보기
6/9
post-thumbnail

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 임필호 팀장님

0개의 댓글