XSS Challenge_Level9

search란에 입력값을 넣는다.

입력 폼에만 반사되어 출력 된다.

hidden 타입인 charset이 보인다. 타겟으로 삼을만해 보이지만 변경해도 반사되어 나오지 않는다. charset은 인코딩을 정의한다. form에 입력한 값이 euc-jp 인코딩으로 인코딩한 문자열이라는 의미이다.
charset을 변경하면 우리가 원하는 인코딩으로 입력을 할 수 있다. "를 다른 형식으로 표현하는 인코딩으로 입력하면 " 존재 여부 확인을 우회하고 HTML 인코딩 되지 않을 수 있다.
charset을 UTF-7 인코딩으로 변형하여 보내었다.
"><script>alert(document.domain)</script>를 UTF-7로 인코딩하면 +ACIAPgA8-script+AD4-alert(document.domain)+ADw-/script+AD4- 이다.
단, UTF-7는 최신 브라우저에서는 사용하지 않으므로 공격을 성공하기 위해서는 인터넷 익스플로러를 이용해야 한다.

tags: writeup, xss, reflected xss, wstg-inpv-01, web hacking, character encoding, utf-7