[취업반 스터디 3달 1주차]

Minseok Jo·2024년 2월 18일
post-thumbnail

[3달 1주차 주제 : XSS: Stored & Reflected]


1. XSS

1) XSS (Cross-Site Scripting) 란?

XSS: 클라이언트 측 스크립트를 삽입하는 공격

피해자 = 이용자이며, 공격자가 삽입하는 악성 스크립트가 이용자의 브라우저에서 실행된다.


2) 클라이언트 측 스크립트란?

  • 이용자의 브라우저에서 실행되는 코드를 의미한다.
      ▶ HTML, CSS, Javascript 등

3) 공격 원리

  1. 사용자의 입력은 GET매개변수, POST데이터, Form필드, HTTP요청 헤더 등을 통해 전달된다.
  2. 공격자는 이러한 매개체를 통해 정상적인 입력값이 아닌, HTML코드나 자바 스크립트를 서버로 전달한다.
  3. 서버의 응답에 이러한 코드가 삽입되고 표시된다면, 이 코드는 피해자의 웹 브라우저에서 실행되게 된다.

4) 어떻게 스크립트를 삽입할까?

  • Stored : 악성스크립트를 서버에 저장하는 방식
  • Reflected : 서버의 echo 기능을 이용하는 방식

2. Stored XSS

1) Stored XSS란?

Stored XSS: 웹 서버에 악성 스크립트를 저장하는 방식

악성 스크립트를 저장시킨 페이지에 사용자가 접속하게 되면 자동으로 스크립트가 실행되어 공격이 동작한다.
ex. 회원가입, 게시판


2) Stored XSS 공격 포인트

  • 데이터가 저장되는 모든 곳에서 XSS가 발생하는 것은 아니다.
  • 데이터가 저장되고, 그 데이터가 서버 응답에 포함되는 곳이어야 한다.

3) Stored XSS 확인절차

1. 작성한 데이터가 서버에 응답되는 것을 확인

(1) 다음과 같은 게시판이 있다.

(2) 게시판에 글을 작성한다.

(3) 글 목록으로 돌아와, 서버 응답에 입력한 데이터가 포함되어 있는지 확인한다.


2. HTML 특수문자를 사용할 수 있는지 체크

(1) 데이터에 < ' " > 의 4가지 특수문자를 입력한다.

(2) 서버 응답에 < ' " > 의 4가지 특수문자가 정상 포함되어 있는지 확인한다.


3. POC 코드 실행

(1) POC (Proof Of Concept) 코드를 먼저 삽입해본다.
○ POC 코드로 alert(1)을 삽입하였으며 prompt(), confirm(), console.log() 함수도 대체로 사용가능

(2) 작성한 스크립트가 동작하는 것을 확인
○ 사진1 : 작성한 스크립트가 서버 응답에 삽입되어 있다.
● 사진2 : 이용자의 브라우저에서도 스크립트가 동작하고 있다.



3. Reflected XSS

1) Reflected XSS란?

Reflected XSS: 공격자가 입력한 스크립트가 서버로부터 그대로 반사되어 응답메시지에 포함돼 사용자의 브라우저에서 스크립트가 실행되는 공격기법


2) Reflected XSS 공격 포인트

  • 입력한 파라미터가 서버의 응답에 그대로 포함되어 전달되는 곳
    ex. 아이디 중복체크, 검색 페이지

3) Stored XSS 확인절차

1. 입력한 데이터가 그대로 서버 응답에 출력되는지 확인

(1) 다음과 같은 페이지가 있다.

(2) 데이터를 입력해보고, 그 값이 그대로 서버 응답에 포함되는지 확인한다.

2. HTML 특수문자 사용 가능여부 체크

(1) < ' " > 의 4개 특수문자를 작성하여 서버 응답에 출력되는지 확인한다.

3. Burp Suite 상에서 POC 코드를 삽입하여, 응답에 그대로 출력되는지 확인

(1) Burp Suite - Repeater 를 통해 POC 코드 삽입 및 응답 확인

4. URL을 복사해서 브라우저에서 정상 동작하는지 확인

(1) URL을 요청하여 스크립트가 동작하는 것을 확인



4) Reflected XSS 공격 방식

  • 스크립트가 포함된 URL을 사용자가 클릭하게 만들어 공격을 수행한다.

  • 따라서 링크를 전달해야 하므로, GET메소드를 사용해야 한다.
     ▶ POST 메소드인 경우 공격의 수단으로 활용할 수 없다.
     ▶ 따라서 Change Request Method 를 통해 GET방식으로 바꾸어 요청 가능한지 확인해본다.


4. Stored VS Reflected XSS

  • Stored XSS
    데이터를 저장하는 위치와, 데이터가 출력되는 위치가 다를 수 있다.
    ex. 글 작성 페이지 (스크립트 작성) - 글 목록 페이지 (스크립트 동작)

  • Reflected XSS
    데이터를 삽입하는 위치와, 데이터가 출력되는 위치가 동일하다.


5. 데이터에 입력가능한 값 (필터링) 확인할 때

1. < ' " > 4가지 문자 확인
2. <script> 확인
3. <script>alert</script> 확인
4. <script>alert(1)</script> 확인

이렇게 점증적으로 체크하면서, 사용할 수 있는 값들을 확인한다.


0개의 댓글