본문 바로가기
공부/정보보안

[DVWA] CSP Bypass

by Skogkatt의 개인 블로그 2019. 11. 25.
반응형

CSP Bypass

  • CSP(Content Security Policy)는 XSS(Cross-site scripting) 및 injection 공격을 비롯한 특정 유형의 공격을 탐지하고 완화하는 데 도움을 주는 추가 보안 계층입니다. 
  • 기본적인 구현은 Content-Security-Policy라고 불리는 HTTP 헤더를 기반으로 합니다.

Low Level

소스 코드

CSP Bypass Low Level Sorce Code

Low level의 소스 코드에는
콘텐츠 허용 목록에 4개의 주소(pastebin, example, code.jquery, ssl.google-analytics)를 추가해
정책이 적용되지 않도록 설정되어있습니다.

 

여기서 주목해야할 부분은 pastebin.com입니다.

pastebin.com은 사용자가 플레인 텍스트를 저장할 수 있는 웹 애플리케이션입니다.

Low Level의 문제점은 이런 목적의 웹을 CSP 허용 목록에 정의했다는 점입니다.

 

pastbin.com에 악의적인 스크립트를 올려서 DVWA에 입력하게 되면
 스크립트가 그대로 실행된다는 허점이 존재합니다.

 

실습

https://pastebin.com/raw/R570EE00

https://pastebin.com/raw/R570EE00 에는 실습용으로 사용할 수 있는 alert()가 게시되어 있습니다.

 

alert()가 게시되어 있는 주소를 DVWA에 입력하면
웹은 pastebin을 신뢰하고 있기 때문에 참조를 허용할 것이고 스크립트는 실행됩니다.

 

Medium Level

소스 코드

 

CSP Bypass Medium Level Sorce Code

Medium Level에서는 CSP에 unsafe-inline을 추가해 Inline JavaScript사용을 금지하고
nonce 속성을 부여했습니다.

 

그 아래 부분에서는 XSS 공격을 감지하면 페이지 로드를 중지시키는
X-XSS-Protection를 비활성화했습니다.(0 : 비활성화, 1 : 활성화)

 

그리고 Low Level에서는 공격자가 입력한 Include 인자가 <script src> 안에 있었지만,
Medium Level에 올라오면서 바로 POST로 넘어가게 바뀌었습니다.

 

실습

 

Include인자가 바로 script로 가지 못하기 때문에 공격을 실행하기 위해서는
공격자가 직접 script태그를 입력해야 합니다.

 

코드에 노출되어 있는 nonce script에 추가하고
실행할 코드를 넣어주면 성공적으로 실행됩니다.

 

High Level

공격 환경 변경점

High 레벨부터는 직접 데이터를 입력하고 인자 값을 보내는 방식에서
solve the Sum 버튼을 눌러 간단한 수식을 계산하는 문제로 변경됐습니다.

 

소스 코드

CSP Bypass High Level Sorce Code

공격 환경은 바뀌었지만 high 레벨의 소스 코드 부분은 특별하게 변한 건 없습니다.
코드 하단에서 high라는 이름의 자바 스크립트를 참조하고 있는 것을 볼 수 있습니다.

 

CSP Bypass High Level High.js

high 자바스크립트에는 Solve the Sum 버튼이 무엇을 하는지 적혀 있습니다.

jsonp라는 이름의 php 파일을 호출하고 간단한 수학 문제를 해결합니다.

 

실습

CSP Bypass High jsonp.php

jsonp.php는 입력된 데이터를 URL 정보에 붙여서 전달하는
GET방식으로 callback 인자를 전달하고 있습니다.

 

문제는 callback에 대한 어떠한 검증도 이뤄지지 않고 있다는 점입니다.
이런 경우엔 callback 인자 자체에 악의적인 스크립트를 삽입할 수 있습니다.

 

Burp Suite를 이용해 패킷을 가로챈 사진입니다

 

아무런 검증이 이루어지지 않고 있는 callback 인자를

원하는 스크립트로 조작해 보내면 바로 실행됩니다.

 

Impossible Level

소스 코드

 

CSP Bypass ImpossibleLevel Sorce Code

 

Impossible Level의 소스코드는 High 레벨과 같습니다.

이전 레벨에서 문제가 됐던 jsonp.php 와 .js를 수정해 취약점을 해결했습니다.

 

JSONP를 호출하지만 callback을 사용하지 않고, 호출하는 기능을 하드코딩했습니다.

 

참고

MDN web docs - https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
Google Developers Web - https://developers.google.com/web/fundamentals/security/csp/?hl=ko

칼리! 도커를 해킹하다 / 저자 문성원 검수 조정원

 

 

반응형

'공부 > 정보보안' 카테고리의 다른 글

제로 트러스트 보안 모델  (0) 2020.02.03
[DVWA] File Upload  (0) 2019.11.27
[Wargame.kr] QR CODE PUZZLE 문제  (0) 2019.09.23
[Wargame.kr] login filtering 문제  (0) 2019.09.16
[Wargame.kr] flee button 문제  (0) 2019.09.10

댓글