Write-Up
<a id="hackme" style="position:relative;left:0;top:0" onclick="this.style.left=parseInt(this.style.left,10)+1+'px';if(this.style.left=='1600px')this.href='?go='+this.style.left" onmouseover="this.innerHTML='yOu'" onmouseout="this.innerHTML='O'">O</a>
<font style="position:relative;left:1600;top:0" color="gold">|<br>|<br>|<br>|<br>Goal</font>
위 코드를 보았을 때, 현재 'O'의 위치가 left = 0 임을 알 수 있다. 아래 그림 1의 console 창에서도 확인이 가능하다.
this.style.left 속성이 1600px 이 될 시, ?go=1600px 경로로 이동할 수 있으므로, 아래 그림 2와 같이 값을 설정해 준다.
그리고 화면에서 'O' 를 한번만 클릭해준다면, 아래 그림 3과 같이 문제를 해결할 수 있다.
문제 풀이 후기
너무 DOM XSS 관점에서만 생각했던 것 같고.. 1600은 넣어보고, 1599는 넣어볼 생각을 왜 못했는지 모르겠다..
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt