[XSS game] Level 1-3

<Level 1>


query 부분을 보면, 우리가 입력한 값을 받아서 그대로 html에 반영하여 화면에 출력해준다. 따라서 search 부분에 <script>alert(1)</script>를 그대로 작성하면 alert 함수를 실행시킬 수 있다.

스크립트를 입력했다.

성공!

 

<Level 2>


웹이 user의 data를 server side 뿐만 아니라 client side DB에도 저장하고 이를 보여준다고 한다.

script를 inject하여 alert 함수를 실행시키면 된다.

뭔가를 post 할 수 있는 사이트가 켜져있다.

코드를 보았다. 내가 입력 가능한 부분에 script를 잘 입력하면 될 것 같다.

이전처럼 <script>alert(1)</script>를 입력했지만 실행되지 않았다.

<script>가 막힌 것일까?

 

<img src = ~>로 작성해보았다.

 

정답!

 

<Level 3>


상위 API에 의해 입력에 나타나는 스크립트를 실행하는 것이 숨겨질 수 있다고 한다.

이번에도 alert 함수를 실행시키면 되는데, 웹에서 아무 곳에서 payload를 입력할 수 없다면 url 주소 바를 이용하라고 한다.

타켓 페이지이다. 확실히 입력할 수 있는 부분이 url 바 밖에 없긴 하다.

url 바에 바로 script를 입력해보자.

음.. 이건 아닌 것 같다.

코드를 살펴보자.

html 변수 부분을 보면, img src를 이용하고 있다! 우리는 이곳을 공격할 수 있다. 위의 image 1,2,3을 보면 frame# 뒤의 숫자에 따라 바뀌는 것을 확인할 수 있다.

이렇게 5를 입력하면 해당되는 이미지가 없기에 보여주지 못한다. 이것은 곧 onerror의 조건을 만족한 것이 아닌가?

html에서 num 뒤에 .jpg’를 붙여주고 있으므로 해당 부분까지 맞춰준 다음에, onerror=alert(1) 를 추가해서 전달해주자.

 

 

성공! <img src= ~> payload를 직접 입력하는 것도 하나의 방법이었지만, 위와 같이 코드를 분석해서 해당 부분을 사용하고 있다면 원하는 대로 살짝만 조작하는 것도 좋은 방법인 것 같다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤