본문 바로가기

1. Web hacking (웹 해킹)/1) Write UP

[2020.03.31] XSS Game Level 1,2,3

​1번

Level 1은 alert()으로 팝업창을 띄우면 풀리는 문제입니다.

입력창에 Hello라고 입력하고 Serch 버튼을 눌러보니

사용자가 입력한 값이 GET 방식으로 전달되는 것을 확인할 수 있었습니다.

더 자세한 분석을 위해 코드를 확인해보았습니다.

사용자가 검색하려고 입력한 값이 query라는 변수에 담기고 그 변수가

message에 들어가는 것을 확인할 수 있었습니다.

HTML에 들어가는 변수를 사용자가 입력할 수 있는 취약점을 이용하여

입력창에 <script>alert("XSS");</script>를 넣고 serch를 누르면

다음과 같이 alert 창이 뜨면서 문제가 해결됩니다.

 

--------------------------------------------------------------------------------------------------------------------------------

2번

alert()으로 팝업창을 띄우면 해결되는 문제입니다.

입력창에 script 구문으로 alert을 띄워보려고 해보았지만

script 구문을 막아놓은 것인지 실행이되지 않았습니다.

 

힌트를 보니 onerror 이벤트를 이용하라고 하였습니다.

onerror이벤트란?

: 외부 파일을 로드하는 동안 오류가 발생했을 경우 동작되는 이벤트이다.

ex) <img src="image.gif" onerror="myFunction()">

-> 이미지를 로드할 때 오류가 발생하는 경우 myFunction 함수가 실행된다.

onerror 이벤트를 사용하여서

<img src="img.gif" onerror="js:alert("hello")>를 입력해

img파일을 불러오지 못했을 때 alert이 실행되도록 하면

문제가 해결됩니다.

--------------------------------------------------------------------------------------------------------------------------------

3번

이전 문제들과 마찬가지고 스크립트를 삽입해서 alert() 팝업을 띄우면 풀리는 문제입니다.

다만 이전문제들은 입력할 수 있는 창들이 있었지만 이 문제는 입력할 수 있는 창이 없습니다.

이 문제의 특이한 점은 사진 탭을 누르면 사진의 Image 뒤의 숫자와 url의 # 뒤의 숫자가 바뀌는 것입니다.

주소창의 #뒤에 임의의 넘버 100을 넣어보니 위 그림처럼 엑박이 뜨면서

Image 뒤에 제가 넣은 100의 값이 출력됩니다.

소스코드를 확인해봅니다.

스크립트 태그 안 코드를 보면 chooseTab함수의 인자값에 의해서

어떤 이미지가 출력될지 결정되는 것을 볼 수 있습니다.

(즉 # 뒤의 입력값이 이미지 태그에 들어간다)

원하는 값을 넣을 수 있는 num변수를 이용하여 공격할 수 있습니다.

이전 문제에서 onerror를 이용하였던 것 처럼 여기에도 onerror 이벤트를 사용합니다.

#뒤에 'onerror=alert("Hello")>를 입력해주면

<img src='/static/level3/cloud" + num + ".jpg'/>"; 코드가

<img src='/static/levle3/cloud' onerror=alert("Hello")>.jpg'/>가 되면서

onerror 이벤트가 트리거 되어 alert 창을 띄울 수 있게 되는 것입니다.