@6번문제
이 사이트 XSS문제들 중 마지막 문제이다.
조금 많이 찾아보고 공부하던 계기가 되었던 문제이다.
(문제 화면)
먼저 페이지가 어떻게 동작하는지 확인해보는게 우선이다.
url 주소를 보니 # 뒤에 있는 경로가 화면에 보이는 것을 확인할 수 있다.
(문제 페이지)
코드를 살펴보니 url을 입력받는데, 여기서 url을 #뒤에 있는 부분을 따로 받아서
아래와 같은 코드에 붙여주어 출력해주고 있는 것을 확인 할 수 있다.
(문제 페이지 코드)
예를들어 #뒤에 abc 라고 입력하면
페이지 화면에 abc가 나올 것이다.
(동작 확인)
abc에서 가져오고 있다 이런 말로 # 뒤에 있는 경로에서 스크립트를 가져와 실행하고 있는 것을 알 수 있다.
문제 힌트를 확인해 보겠다.
(문제 힌트)
문제 힌트를 보니 스크립트 파일을 직접 서버에 올리고 그 경로를 적어주어 해결할 수 없다면 google.com/jsapi?~~~ 페이지를 이용하라고 나와있다.
이 문제를 해결하기 위해 서버까지 올리는건 부담스러우므로 다른 방법을 이용해보자.
찾아본 방법 중 Data Url Scheme라는 방법이 있었다.
데이터를 url 표현으로 바꾸어 주는 것이다.
사용 방법은 data:[자료타입], [데이터] 이렇게 들어간다.
우리는 javascript를 이용할 것이므로 자료타입은 text/javascript 이다.
예를들어 test 라는 문자로 테스트해보자.
(테스트)
test라는 데이터를 표현한 것이다.
스크립트 alert를 표현하면
(script 표현)
위와 같이 된다.
이 데이터를 # 뒤에 붙여주기만 하면 된다.
(스크립트 데이터 전달)
(문제 해결)
이렇게 되면 페이지에서 스크립트가 실행되고 문제를 해결할 수 있다.
문제에서 준 힌트를 살펴보면 스크립트는 아래와 같다.
(스크립트)
callback에 foo라는 값이 전달되어 foo 라는 함수가 스크립트 아래에서 실행되고 있는 것을 확인해 볼 수 있다.
예를들어 내가 abc라고 입력을 하면
(abc 입력)
abc() 라는 함수가 실행된다.
이를 이용해보면 callback에 alert라고 입력을 하게되면
(alert() 함수 실행)
alert() 함수가 실행된다.
이 소스스크립트를 이용하면 위 경로의 주소를 복사해서 #뒤 경로로 적어주면 된다.
http://는 필터링 하고있으므로 Http:// 이렇게 대소문자를 섞어 써주면 필터링을 못하게 되어있으므로 우회할 수 있다.
(문제 해결)
6번문제 까지 모두 푸니 마지막으로 아래와 같이 축하(?)의 페이지가 뜬다.
(축하의 페이지)
'WarGame > XSS Game' 카테고리의 다른 글
XSS GAME - level 5 (0) | 2017.04.03 |
---|---|
XSS GAME - level4 (1) | 2017.04.01 |
XSS GAME - level3 (0) | 2017.03.31 |
XSS GAME - level2 (0) | 2017.03.31 |
XSS GAME - level1 (0) | 2017.02.15 |