XSS Game_Level6

6번 문제도 alert를 띄워야 한다.

6번 문제는 URL에 적힌 javascript 파일을 가져와 실행한다.

URL # 문자 뒤쪽의 문자열을 바꾸었을 때, 해당 문자열을 경로로 하여 파일을 가져오는 것을 볼 수 있다. 예를 들어 /static/qwerty 를 가져오게 했다.
앞의 static을 지워도 여전히 뒤쪽 문자열을 이용한다.(우회할 필요가 없다)

qwerty를 입력했을 때 <script src="qwerty"></script> 형태가 된 것을 확인할 수 있다.
그렇다면 src에 외부에 저장해 둔 자바스크립트의 주소를 넣어 둔다면 어떨까?

발상은 좋았지만 실패했다. 문제에서 필터링을 적용하고 있기 때문이다.
/^https?:\/\// regex로 입력 값을 필터링한다. 이 때문에 http:// 와 https://는 쓰지 못 한다.
http가 아닌 프로토콜로 우회 가능할 것 같지만, 귀찮아서 다른 방법을 이용했다. Data URL scheme 이라는 URL 형식을 이용할 수 있다. 데이터 URI 스킴 참고, RFC2397
간단히 말 하자면 URL에 데이터를 넣어 보내는 것이다.data:형식,데이터 꼴로 이용한다.

데이터 URL 스킴으로 스크립트를 입력했다.


마지막 문제를 풀면 이런 화면이 나온다.
tags: writeup, xss, reflected xss, wstg-inpv-01, web hacking, data url scheme