본문 바로가기

모의해킹/Dreamhack

CSP Bypass

728x90

문제 정보

CSP 취약점을 이용하여 푸는 문제이다...!

이 문제를 풀기 위해 CSP 취약점에 대해 알아야 한다.!

 

∙ CSP (Content-Security Policy)

신뢰할 수 있는 웹 페이지 CSP에서 악의적으로 XSS, 클릭 재킹 및 기타 코드 삽입 공격을 방지하기 위한 정책이다.

지시문
default-src : 모든 리소스에 대한 정책
script-src : Javascript 등 웹에서 실행 가능한 스크립트에 대한 정책
style-src : css에 대한 정책
connect-src : script src로 불러올 수 있는 url에 대한 정책
img-src : 이미지 ( data: URL에서 이미지가 로드되는 것을 허용하려면 data:를 지정 )
script-nonce : script-src에 nonce가 포함되는 정책
form-action : form 태그 내 action 부분에 대한 정책
object-src : 플러그인, 오브젝트에 대한 정책
media-src : video, audio
font-src : font
sandbox : HTML 샌드박스
reflected-xss : X-XSS-Protection header와 동일한 효과
report-uri : 정책 위반 케이스가 나타났을 때 내용을 전달할 URL
base-uri: <base> 요소에 나타날 수 있는 URL을 제한

 

문제의 파일소스를 바로 보자..!

@app.after_request
def add_header(response):
    global nonce
    response.headers[
        "Content-Security-Policy"
    ] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}'"
    nonce = os.urandom(16).hex()
    return response

header에 CSP가 설정이 되어 있다. 

해당 부분에서 script-src 'self' 'nonce-{nonce}' 이므로 동일 출처 내의 파일을 src로 세팅하거나, 올바른 nonce 속성이 세팅되어 있으면 예외적으로 스크립트 사용이 가능하다는 의미이다.

 

<script src ='/vuln? param=location.href="/memo? memo="%2 Bdocument.cookie'></sciprt>을 페이로드를 사용하면 flag값을 얻을 수 있다.

vuln? param=location.href="/memo? memo="%2 Bdocument.cookie'></sciprt>에서 + 대신에 % 2B을 사용한 이유는 URL Decoding이 되면서 + 가 공백으로 해석되지 않도록 한 번 인코딩을 해준 것이다.!

 

'모의해킹 > Dreamhack' 카테고리의 다른 글

phpMyRedis  (0) 2023.12.01
Client Side Template Injection  (0) 2023.11.25
[wargame.kr] crack crack crack it  (0) 2023.11.20
[wargame.kr] dun worry about the vase  (0) 2023.11.18
crawling  (0) 2023.11.15