xss-game level 2에 들어가면 보이는 설명입니다.
위 내용은
1. Your Target 창 속 입력창에 JavaScript를 사용해서
2. 경고창을 띄우는 코드가 게시물 안에 들어가도록 하면
3. 다음 단계로 넘어갈 수 있다
라고 정리할 수 있습니다.
우선 입력창에 입력값을 넣으면 생기는 변화를 알아보기 위해, a를 입력하고 Share status! 버튼을 누르면..
버튼을 누른 시각과, 입력값이 하나의 메세지박스 형태로 묶여 게시되는 것을 볼 수 있습니다.
(F12 - 요소 : 페이지 소스코드 보기)
Share status! 버튼을 누른 후 생긴 변화를 살펴봅시다!
1. 받은 입력값을 메세지박스 안에 <blockquote>입력값</blockquote> 으로 보여준다
이것만 봐서는 level 1에서 쓴 대로 <script>alert('...')</script>를 넣어도 쉽게 해결될 것처럼 보입니다.
하지만 실패.
필터링 당한 것처럼 보이나, 검사(F12)를 하면 입력값이 제대로 <blockquote>태그 안에 잘 들어가 있는 것을 확인할 수 있습니다. 그렇다면 무엇이 문제이기에 경고창이 안 뜨는지 알아보기 위해서 F12 - 소스 로 소스코드를 살펴봅시다.
입력한 값과 입력할 당시의 시간을 저장하는 코드입니다. 코드 해석 실력이 부족하긴 하지만, 읽었을 때 문제될 부분은 없어 보였습니다. 아마 저장된 게시물을 출력하는 코드를 보아야 할 것 같은데, 그 코드파일은 아무리 찾아봐도 없었기에 왜 <script>alert('...')</script>가 실패하는가 살펴보기는 일단 넘어가겠습니다.
[실패 1]
다시 한 번 Your Target 창을 살펴보았습니다. url창을 보니,
...appspot.com/level2/frame
으로 level 1 때와 /level2/ 부분의 숫자만 달랐습니다.
그래서 하게 된 추측이
1. url에서 level2를 level1으로 바꾸고
2. frame뒤에 파라미터로 <script>alert('...')</script>를 준다면
3. Your Target 창 부분만 level1으로 바뀌어서 경고창을 띄울 수 있지 않을까?
입니다.
결론만 말하자면 실패했습니다.
[실패 2]
알림창에서 ..appspot.com/level1/frame 경로를 찾아가지 못했다고 알려주었습니다.
그렇다면 원래 경로(/level2/frame)에서 파라미터 값으로 JavaScript문을 넘겨주면 해결되겠다! 라고 생각을 했는데,
1. level 2에서는 url로 넘겨받은 값을 화면에 출력하지 않을 뿐만 아니라
2. 애초에 url로 값을 넘겨받지도 않는다
위 실패원인에 의거하여 실패했습니다.
[성공]
힌트를 보면 XSS game 사이트가 친절하게도 img 태그와 onerror 속성을 사용하여 문제를 풀어라 하고 알려줍니다.
답을 알려주는 것이나 마찬가지군요!
Your Target 창 속, 텍스트박스에
<img src="success" onerror='alert("?")'>
// onerror 속성값을 감싸는 따옴표와 alert() 안 따옴표가 같아지지 않도록 주의
를 넣어서 다음 단계로 넘어갈 수 있습니다.
성공입니다.
'XSSgame' 카테고리의 다른 글
XSS-game level 3 (0) | 2023.01.24 |
---|---|
XSS-game level 1 (0) | 2023.01.24 |