이번 문제는 지난 문제들과 같이 click 문자를 누르는 사용자를 속여 이메일을 변경시키면 되는데 frame buster(or frame killer)로 인해 frame의 사용이 막혀있다.
문제 사이트를 보면 script문으로 top != self (최상위 브라우저인지 확인) 조건문으로 막아놓은걸 볼 수 있다.
저번 문제와 동일한 코드로 확인해보면
막혀있는 걸 확인할 수 있다.
그럼 여기서 어떻게 우회를 해야 할까?
https://en.wikipedia.org/wiki/Framekiller
위 링크에서 힌트를 얻을 수 있는데
iframe에는 sandbox라는 속성이 있고 속성값은 iframe 콘텐츠에 대해 허용되는 기능의 집합이다.라고 적혀 있다.
그럼 일단 sandbox라는 속성은 무엇이냐?
보안을 위해 iframe기능에 제한을 걸어두는 속성인데
간단히 설명하자면
공백일 때는 모든 사항이 제한되고
내가 허용하고 싶은 사항을 속성값으로 넣으면 그 기능만 허용이 되는 것이다.
https://www.tcpschool.com/html-tag-attrs/iframe-sandbox
sandbox속성은 보안을 위한 속성인데 이걸로 우회를 한다니 이상하다라고 생각할 수 있지만
처음에 frame buster가 무엇으로 작성되어 있었는지 생각해 보자
바로 script다.
그런데 sandbox속성으로 만약 script실행을 제한해 버리면?
frame buster는 실행되지 않는다.
확인을 위해
sandbox속성을 공백으로 추가해 script를 포함한 모든 사항을 제한해 버리면
frame buster가 실행되지 않고 웹페이지가 출력되는 걸 확인할 수 있다.
대신 우리가 모든 사항을 제한했기 때문에 이메일 변경도 안된다.^^
이메일 제출은 form으로 제출되기 때문에
sandbox="allow-forms"로 form제출만 허용해 주면
이메일 변경이 되고 문제가 풀린다.