김승현
[Dreamhack : Web] SCP Bypass advanced 본문
문제


CSP Bypass 문제의 업그레이드 버전이다.
풀이

접속하면 이렇게 vuln, memo, flag 페이지를 볼 수 있다. vuln 부터 가보자.

이렇게 생겼다. memo로 가보자.

이렇게 생겼다. flag로 가보자.

각 엔드포인트들은 지금까지 보던 것들과 완전 똑같이 생겼다. 이번엔 소스코드를 확인해 보자.
memo나 flag 같은 페이지는 이전 문제들과 큰 차이점이 없기 때문에 차이점이 있는 내용들만 분석하겠다.
nonce

일단 코드 초반부에 unsigned 랜덤값을 16진수로 변환해서 nonce 변수에 저장한다.
vuln

vuln엔드포인트에서 이전엔 그냥 param을 return하는 방식이었는데 이번엔 html을 render_template를 이용해서 보여주기
때문에 vuln 페이지에서 테스트를 해볼 순 없을 것 같다....ㅜ
after_request

이 함수의 경우 HTTP 요청이 끝나고 브라우저에 응답하기 전에 실행되는 것들이다.
전역 변수로 nonce를 선언response의 헤더에,
['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'" |
내용을 저장. 저번 csp 문제와 다른 점은 obeject-src에 none이 추가된 것이다.
onject-src의 경우 찾아보니까 <object>, <embed>에 대한 유요한 소스 검사라고 하는데 해당 내용은 none이기 때문에
위의 object, embed와 같은 태그들은 모두 쓰지 못할 것 같다.
nonce 변수에 unsinged 랜덤값을 16진수로 저장
response를 반환
이정도만 봐도 memo, flag, index 엔드포인트들은 기존에서 nonce만 추가됐기 때문에 분석할 필욘 없어 보인다.
CSP Bypass문제에서 사용한 코드는
<script src="/vuln?param=location='/memo?memo='%2bdocument.cookie"></script>
위의 코드인데 여기는 object-src에 해당되는 내용이 없는 것 같아서 그대로 한 번 flag에 넣고 memo를 확인했다.

그러나 flag없이 hello만 있었다. 분명 flag에선 good이 떴기 때문에 필터나 그런 건 걸린 게 아닌 것 같긴 한데....
object-src에 포함되는 코드들을 검색해봤다. 그러나 딱히 내가 입력한 파라미터완 관련이 없어 보여서 강의를 다시 봤더니
base uri 미지정일 때 nonce retargeting이라는 공격이 있다고 해서 이걸 활용하면 될 것 같다.
강의에서 보면 jquery.js처럼 우리가 사용할 수 있는 서버 내의 js 코드를 찾아낼 필요가 있다. 개발자도구를 써보자.

vuln 페이지의 Elements인데 스크립트로 실행되는 /static/js/jquery.min.js와 /static/js/bootstrap.min.js이 있다.
이걸 내 서버에 같은 이름으로 업로드 하는데 내용만 바꿔서 올려보자.
/static/js/jquery.min.js
location.href="127.0.0.1/memo?memo="+document.cookie

짠
'Web > Dreamhack : Web' 카테고리의 다른 글
[Dreamhack : Web] Client Side Template Injection (0) | 2023.03.03 |
---|---|
[Dreamhack : Web] CSRF advanced (0) | 2023.03.03 |
[Dreamhack : Web] SCP Bypass (0) | 2023.03.01 |
[Dreamhack : Web] XSS Filtering Bypass Advanced (0) | 2023.03.01 |
[Dreamhack : Web] XSS Filtering Bypass (0) | 2023.03.01 |