웹해킹_3주차

2022. 9. 20. 23:4622-2학기 (SISS)/웹해킹

https://dreamhack.io/lecture/roadmaps/1

 

Web Hacking

웹 해킹을 공부하기 위한 로드맵입니다.

dreamhack.io

3주차 (9/19~9/25) : Stage 4

STAGE 4 : Cross-Site-Scripting (XSS)


1. Cross-Site-Scripting (XSS)

[ClientSide : XSS]

1. 들어가며

클라이언트 사이드 취약점의 대표적인 공격인 Cross Site Scripting(XSS)의  종류와 어떠한 상황에서 발생할 수 있는지, 해당 공격이 어떻게 활용되는지를 알아보기

 

2. XSS

1) XSS

XSS는 클라이언트 사이드 취약점 중 하나로, 공격자가 웹 리소스에 악성스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행항 수 있다.

SOP 보안 정책이 등장하면서 서로 다른 오리진에서는 정보를 읽는 행위가 이전에 비해 힘들어졌지만, 이를 우회하는 다양한 기술로 XSS 공격은 지속되고 있다.

2) XSS 발생 예시와 종류

XSS 공격은 이용자가 삽입한 내용을 출력하는 기능에서 발생한다. 

클라이언트는  HTTP 형식으로 웹 서버에 리소스를 요청하고 서버로부터 받은 응답, 즉 HTML, CSS, JS 등의 웹 리소스를 시각화하여 이용자에게 보여준다.

XSS는 발생 형태에 따라서 다양한 종류로 구분된다.

3) XSS 스크립트 예시

자바스크립트는 웹 문서의 동작을 정의한다. 자바스크립트로 여러 이벤트를 구현할 수 있는데, 이러한 여러 행위가 가능한 이유는 이용자를 식별하기 위한 세션 및 쿠키가 웹 브라우저에 저장되어 있기 떄문이다. 따라서 공격자는 자바스크립트를 통해 이용자에게 보여지는 웹 페이지를 조작하거나 웹 브라우저의 위치를 임의의 주소로 변경할 수 있다.

자바스크립트는 다양한 동작을 정의할 수 있어서 XSS 공격에 사용된다.

자바스크립트를 실행하기 위한 태그로 <script>가 있다.

 

3. Stored XSS

Stored XSS는 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발성하는 XSS이다.

그 방식으로 게시물과 댓글에 악성 스크립트를 포함해 업로드하는 방식이 있다. 게시물은 불특정 다수에게 보여지기 떄문에 해당 기능에서 XSS 취약점이 존재할 경우 높은 파급력을 갖게 된다.

 

4. Reflected XSS

Reflected XSS는 서버가 악성 스크립트가 담긴 요청을 출력할 때 발생한다. 

그 방식으로 게시판 서비스에서 작성된 게시물을 조회하기 위해 검색창에서 스크립트를 포함해 검색하는 방식이 있다.

이용자가 게시물을 검색하면 서버에서는 검색 결과를 이용자에게 반환한다.

Reflected XSS는 Stored XSS와는 다르게 URL과 같은 이용자의 요청에 의해 발생한다. 따라서 공격을 위해서는 악성 스크립트가 포함된 링크에 접속하도록 유도해야 한다.

 

5. 마치며


[Quiz : XSS]


2. [함께실습] XSS

[Exercise : XSS]

1. 들어가며

XSS 취약점이 존재하는 드림핵 워게임 문제를 풀어보면서 다른 이용자의 클라이언트에 저장된 쿠키를 탈취해보는 것을 실습하기

-배경지식 : 셀레늄(Selenium)은 웹 애플리케이션 테스팅에 사용되는 파이썬 모듈로, API를 통해 웹 드라이버를 사용할 수 있다. 응답에 포함된 Javascript, CSS와 같은 웹 리소스를 웹 드라이버를 통해 해석하고 실행하기 때문에 웹 브라우저를 통해 페이지를 방문하는 것과 같은 역할을 한다.

 

2. 웹 서비스 분석

1) 엔드포인트 분석

-vuln 함수 : vuln 페이지를 구성하는 코드이다. 코드를 살펴보면, 이용자가 전달한 param 파라미터의 값을 출력한다.

-memo 함수 : memo 페이지를 구성하는 코드이다. 코드를 살펴보면, 이용자가 전달한 memo 파라미터 값을 render_template 함수를 통해 기록하고 출력한다.

-flag 함수 : flag 페이지를 구성하는 코드이다. 코드를 살펴보면, 메소드에 따른 요청마다 다른 기능을 수행하는 것을 알 수 있다.

 

3. 취약점 분석

vuln과 memo 엔드포인트는 이용자의 입력값을 페이지에 출력한다.

memo의 함수는 전달된 템플릿 변수를 기록할 때 HTML 엔티티코드로 변환해 저장하기 때문에 XSS가 발생하지 않는다.

vuln은 이용자가 입력한 값을 페이지에 그대로 출력하기 때문에 XSS가 밸상한다.

 

4. 익스플로잇

1) 익스플로잇

탈취한 쿠키를 전달받기 위해서는 외부에서 접근 가능한 웹 서버를 사용하거나 문제에서 제공하는 memo 엔드포인트를 사용할 수 있다. 

2) 쿠키 탈취

임의 이용자의 쿠키를 탈취하기 위한 방법은 두 가지 방법이 있다.

- memo 페이지 사용 

: flag 엔드포인트에서 익스플로잇 코드를 입력하면, memo 엔드포인트에서 임의 이용자의 쿠키 정보를 확인할 수 있다.

- 웹 서버 사용 

: 외부에서 접근 가능한 웹 서버를 통해 탈취한 쿠키를 확인할 수 있다.

  flag 기능에서 익스플로잇 코드를 입력하면, 접속 기록에 포함된 FLAG를 확인할 수 있다.

 

5. 마치며

XSS 공격은 주로 이용자의 입력값이 출력되는 페이지에서 발생하며, 해당 공격을 통해 타 이용자의 브라우저에 저장된 쿠키 및 세션 정보를 탈취할 수 있다.


[xss-1]


3. [혼자실습] XSS

[xss-2]

'22-2학기 (SISS) > 웹해킹' 카테고리의 다른 글

웹프로젝트 3주차_3조  (0) 2022.09.25
웹해킹_2주차  (0) 2022.09.12
웹해킹_1주차  (0) 2022.09.10