해킹/웹해킹

5주차 과제 1_XSS 강좌 정리

코코딩딩 2020. 11. 30. 19:41

1. XSS 관련 youtube 강좌

<웹 해킹 강좌 – XSS(Cross Site Scripting) 공격의 개요와 실습>

XSS 공격 : 스크립트 정보를 삽입하는 공격이라 할 수 있음, 대상은 JS(JavaScript)

가장 기본적인 Cross Site Scripting 공격 구문

<script>
alert(“XSS 공격!”);	// 가장 기본적인 Cross Site Scripting 공격 구문
</script>

이러한 공격이 통하지 않는다면, Cross Site Scripting  다양한 스크립팅 공격이 가능하므로 여러 공격을 시도 (이러한 점이 CSS의 장점)

  • <a href=“javascript:alert(‘XSS’)”XSS</a>
  • <img arc=“#” onerror=“alert(‘XSS 공격!’);”>
  • 아스키 코드를 이용 (아스키 코드 형태로 보내주면, 일부 웹서버는 필터링을 해주지 않아 공격이 통함)
  • 기타 등등...

Cross Site Scripting 공격에서는 허점을 찾는 것이 중요!

 

2. XSS 관련 드림핵 강좌 & 실습

Same Origin Policy(SOP) : 서로 다른 오리진의 문서 또는 스크립트 들의 상호 작용을 제한하는 정책

오리진 : 프로토콜, 포트, 호스트로 구성, 구성 요소가 모두 일치해야 동일한 오리진

 

SOP가 적용된 상태에서도 리소스를 공유하는 방법

  • postMessage : 메시지를 주고받기 위한 이벤트 핸들러를 이용해 리소스를 공유
  • JSONP : 스크립트 태그를 통해 다른 오리진의 리소스를 요청하고, 응답 데이터를 현재 오리진의 Callback 함수에서 다루는 방식으로 리소스를 공유
  • Cross Origin Resource Sharing (CORS) 헤더 사용 : 다른 오리진이 허용하는 설정 등을 HTTP 헤더를 통해 확인한 후 허용하는 요청을 보내 리소스를 공유

취약점과 공격 방식

  • Cross Site Scripting (XSS) : 공격자의 입력값이 크로스 사이트의 자바스크립트 일부로 웹 브라우저에서 실행되는 취약점, 실행된 스크립트는 SOP 제약 없이 사이트의 구조를 변경하거나 임의 HTTP 요청을 보낼 수 있음
  • Cross Site Request Forgery (CSRF) : 비정상적으로 사용자의 의도와 무관하게 HTTP 요청을 보내는 것, Simple Request나 HTML 엘리먼트라면 SOP의 제약을 받지 않는 점을 이용
  • Open Redirect : Redirect 기능을 악용해 피싱사이트로 접속을 유도하거나, 다른 취약점을 연계하여 사용자를 공격
  • Click Hijacking : 공격자가 생성한 버튼, 이미지와 같은 엘리먼트를 겹쳐 올려 UI를 스푸핑해 사용자 의도와는 다른 작업을 수행하게 하는 취약점

XSS 공격의 요구 조건

  1. 입력 데이터에 대한 충분한 검증 과정이 없어야 합니다.
  2. 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야 합니다.

XSS with Javascript : 대표적인 방법은 script 태그를 이용하는 방식

ex) 페이지 변조 공격의 예시

<script>
// 사용자의 페이지 정보에 접근.
document;

// 사용자의 페이지에 데이터를 삽입.
document.write("Hacked By DreamHack !");
</script>

Stored XSS : 악성 스크립트가 서버 내에 존재하는 데이터베이스 또는 파일 등의 형태로 저장되어 있다가 사용자가 저장된 악성 스크립트를 조회하는 순간 발생하는 형태의 XSS

Reflected XSS : 악성 스크립트가 사용자의 요청과 함께 전송되는 형태

 

XSS 방어 기술

  • Server-side Mitigations : XSS를 유발할 수 있는 태그 삽입을 방지하기 위해 서버 단에서 검증하는 방법                                                 +) 화이트리스트 필터링 : 허용해도 안전한 일부 태그, 속성을 제외한 모든 값을 필터링 하는 것
  • HTTPOnly Flag : 서버 측에서 응답 헤더에 Set-Cookie 헤더를 전송해 자바스크립트에서 해당 쿠키에 접근 하는 것을 금지
  • Content Security Policy(SP) : 응답 헤더나 meta 태그를 통해 선언, 각각의 지시어를 적용하여 사이트에서 로드하는 리소스들의 출처를 제한
  • X-XSS-Protection : Response Header에 선언해서 사용 (실 서비스의 보안을 위해서 헤더를 신뢰하지 않는 것을 권장한다고 함)
Content-Security-Policy: <지시어>;	// CSP 선언 방식
...

X-XSS-Protection: <값>	// X-XSS-Protection 선언 방식

 

 

참고 : https://www.youtube.com/watch?v=DoN7bkdQBXU

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