starting point

xss-game-level 3 본문

WarGame_WriteUp/XSS-Game

xss-game-level 3

dundole 2020. 2. 19. 11:50

[사진1]
[사진2]
[사진3]

3개의 인덱스를 선택하면 각 인덱스에 해당하는 이미지를 출력해주는 페이지다. 그에 따라 url의 frame#(num1)에서  num1부분이 변화하는 것을 알 수 있다. 그리고 이번 문제는 입력할 수 있는 입력창이 없으므로 url을 이용해야 함을 알 수 있고, 아래의 그림같이 문제의 설명을 통해서도 알 수 있다.

 

[사진4]

각 인덱스를 선택했을 때 html문서에 어떤 변화가 있는지 살펴보기 위해 개발자 도구를 통해 알아보겠다.

[사진5]
[사진6]

onclick속성으로 chooseTab(string)함수가 실행되고 그에 따라 Image (num2)와 cloud(num3)에서 num2, num3부분이 변화하는 것을 알 수 있다. 이를 통해 이 두 부분을 공략해야 함을 알 수 있다.

 

[사진7]

chooseTab()함수가 구현된 것을 보니 전달된 매개변수 num이 [사진5], [사진6]에서 본 num2, num3를 구성하는 것을 알 수 있다. num2는 parseInt()함수를 통해 값이 조작되기 때문에 num3를 이용해야 한다. 페이지가 로드되었을 때 hash값이 chooseTab()함수의 매개변수가 되는 것을 [사진7]의 코드(window.onload)를 통해 확인 할 수 있기 때문에 공격은 url의 #뒤에 들어가면 된다.

 

[사진8]

[사진7]에서 num3가 구성되는 코드만 가져왔다. 여기서는 2번 문제에서 사용한 on속성을 이용하면 문제를 해결할 수 있을 것이다.

'onerror="alert(1);"를 입력했다. 혹은 '><script>alert(1);</script>을 입력해도 된다.

[사진9]

우선 '(싱글쿼터)로 src속성값의 입력을 끝내고 onerror속성값을 통해 스크립트문을 넣어서 이미지 로드 시 에러를 유도하여 경고창이 출력되게 했다.

[사진10]


이 문제에서는 내가 url을 통해 입력되는 값이 필터링없이 사용된다면 html소스를 변형시켜 스크립트가 실행될 수 있음을 보여준다. 이러한 문제점때문에 url에 입력되는 값에 대한 검증이 반드시 필요할 것이다. 

'WarGame_WriteUp > XSS-Game' 카테고리의 다른 글

xss-game-level 6  (1) 2020.02.19
xss-game-level 5  (0) 2020.02.19
xss-game-level 4  (0) 2020.02.19
xss-game-level 2  (0) 2020.02.19
xss-game-level 1  (0) 2020.02.19