csp bypass와 advanced
csp bypass와 advanced의 차이가 궁금합니다
csp bypass에서 사용된 페이로드가 csp bypass advanced 에서 먹히지 않는 이유를 잘 모르겠습니다.
return과 render template 의 차이라는 것 까지는 어디선가 들어왔는데,
자세한 내용과 원리를 알고 싶습니다.
#web
#csp
작성자 정보
답변
1
fow
대표 업적 없음
안녕하세요,
CSP Bypass 문제에서, 강의에서 사용하는 payload가 동작하는 이유는 다음과 같습니다.
- admin이
<script src="/vuln?param=document.location='/memo?memo='%2bdocument.cookie"></script>
내용을 담은/vuln
엔드포인트 방문 /vuln
을 방문하는 과정에서script
의src
를 로드하여,/vuln?param=document.location='/memo?memo='%2bdocument.cookie
가 담고 있는 스크립트 내용인document.location='/memo?memo='%2bdocument.cookie
를 수행
패치된 CSP Bypass Advanced의 경우, /vuln
이 파라미터로 전달 받은 내용을 그대로 출력하는 것이 아니라, 완전한 HTML 문서를 반환한다는 차이가 있습니다.
여기에서, /vuln
내부에서 사용자 파라미터를 로드하는 템플릿에 safe
옵션이 걸려있기 때문에 앞서 말한 과정 중 1번 과정은 동작합니다.
하지만 2번 과정에서 스크립트를 로딩한 뒤 그 내용을 수행할 때, /vuln
이 완전한 HTML 문서를 반환하기 때문에 정당하게 javascript로 해석될 수 없어(<!DOCTYPE html>~
로 시작하는 문서 자체를 javascript로 해석하려고 하기 때문에) 오류가 발생하는 것입니다.
위와 같이 두 번 돌아가는 페이로드를 작성하는 것은 CSP를 우회하기 위함인데, 각 단계에서 달성하고자 하는 것은 무엇인지, 그리고 실제로 실행하게 되는 스크립트/구문은 어떤 것인지 생각해보시면 이해하시는데 도움이 될 것 같습니다!