Write-up/XSS-game

XSS-game level 3

연양 2020. 8. 5. 12:22

xss-game level 3

미션 설명
이전 레벨에서 보셨듯이, 일부 일반적인 JS 기능은 브라우저가 입력에 나타나는 스크립트를 실행하도록 하는 실행 싱크입니다. 때때로 이 사실은 이 기능들 중 하나를 후드 아래에서 사용하는 더 높은 수준의 API에 의해 숨겨진다.
이 레벨의 어플리케이션은 숨겨져 가라앉았다


미션 목표
이전과 같이 스크립트를 주입하여 앱에 JavaScript 알림()를 팝업한다.
어플리케이션의 어느 곳에서도 페이로드 입력을 할 수 없으므로, 아래의 URL 표시줄에서 수동으로 주소를 편집해야한다.

 

힌트

1. 버그의 원인을 찾으려면 JavaScript를 검토하여 사용자 제공 입력을 처리하는 위치를 확인하십시오.
2. window.location 객체의 데이터는 공격자의 영향을 받을 수 있다.
3. 주입점을 확인했으면 새로운 HTML 요소를 몰래 들여오기 위해 무엇을 해야 하는지 생각해 보십시오.
4. 이전과 마찬가지로 페이지 로드 후 추가된 스크립트를 브라우저가 실행하지 않기 때문에 페이로드로 <스크립트> ...를 사용하는 것은 작동하지 않는다.

 

by. papago.naver.com


xss-game level 3문제이다. alert()를 띄우면 되는데 이 문제의 경우 level2에서 썼던 방법을 쓰면 쉽게 풀 수 있다.

 

문제를 살펴보면 image 1,2,3이 있을 때 각각 클릭하면 url에 frame#1, #2, #3으로 바뀌는 것을 확인할 수 있다.

 

level 3 문제 

 

url 에 4를 넣었고, Image 4하면서 img 아이콘만 뜨고 아무것도 뜨지 않았다. 개발자 모드로 확인해보니, img src="/static/level3/cloud4.jpg"> 로 url로는 frame#num.jpg 것을 알았다.  

 

 

 

이를 기억하고 먼저 공격쿼리를 넣기 전 소스코드를 살펴보자 

 

img  태그를 이용해서 정해진 경로에서 num에 확장자 .jpg를 이용해서 숫자에 해당되는 이미지를 불러오는 것을 확인하였다. 저기에서 xss가 터질 것 같다고 조심스럽게 생각을 해보면서 어떻게 넣어줄지 생각을 해 보았다. 

 

level2 도 img태그의 속성을 풀어서 문제를 해결했고 level3의 문제에도 문제에서 img태그를 사용하고 있기에 level2와 동일하게 onclick 과 onerror속성을 이용해서 문제를 해결할 수 있을 것 같다.

 

 

조금 TMI로 처음에는 frame#4 onerror="javascirpt:alert('test3')"></> 이렇게 넣어줬었다... 무슨 생각으로 저렇게 넣어줬는지 모르겠다. (아마 딴 생각 한 듯;)

 

여튼 내가 하고자 하는 말은 frame#3 frame#2 이렇게 url에서 바뀐다고 frame#없는숫자만 적고 태그의 속성을 넣어주면 안된다는 말을 하고 싶었다.  <img src="" onerror=""> 이렇게 쓰지 <img src=" onerror=""> 이렇게 쓰지는 않으니까. 그리고 위에 코드에도 보면 .jpg' 이렇게 되어있다. 그래서  작은따옴표(')를 꼭 붙여 줘야한다. 위치는 어디든 상관이 없다. 

 

 

개발자모드로 공격쿼리가 들어갔는지 확인 

 

 

따옴표 위치가 바뀌어도 xss가 터지는 것을 확인 

 

CLEAR

 

 

추가( onerror ) 

 

onerror 속성 이용

 onerorr 속성을 이용해서 문제 풀 수 있다. 

 

 

문제는 풀렸지만, 따옴표 위치를 바꿔서 한번 더 해보았다.  

 

따옴표 위치가 바뀌어도 상관없이 xss가 터짐

 

CLEAR 2