@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

+ Recent posts