@6번문제
이 사이트 XSS문제들 중 마지막 문제이다.
조금 많이 찾아보고 공부하던 계기가 되었던 문제이다.




(문제 화면)



먼저 페이지가 어떻게 동작하는지 확인해보는게 우선이다.
url 주소를 보니 # 뒤에 있는 경로가 화면에 보이는 것을 확인할 수 있다.



(문제 페이지)



코드를 살펴보니 url을 입력받는데, 여기서 url을 #뒤에 있는 부분을 따로 받아서
아래와 같은 코드에 붙여주어 출력해주고 있는 것을 확인 할 수 있다.



(문제 페이지 코드)



예를들어 #뒤에 abc 라고 입력하면
페이지 화면에 abc가 나올 것이다.



(동작 확인)



abc에서 가져오고 있다 이런 말로 # 뒤에 있는 경로에서 스크립트를 가져와 실행하고 있는 것을 알 수 있다.
문제 힌트를 확인해 보겠다.



(문제 힌트)



문제 힌트를 보니 스크립트 파일을 직접 서버에 올리고 그 경로를 적어주어 해결할 수 없다면 google.com/jsapi?~~~ 페이지를 이용하라고 나와있다.
이 문제를 해결하기 위해 서버까지 올리는건 부담스러우므로 다른 방법을 이용해보자.

찾아본 방법 중 Data Url Scheme라는 방법이 있었다.
데이터를 url 표현으로 바꾸어 주는 것이다.
사용 방법은 data:[자료타입], [데이터] 이렇게 들어간다.
우리는 javascript를 이용할 것이므로 자료타입은 text/javascript 이다.
예를들어 test 라는 문자로 테스트해보자.



(테스트)



test라는 데이터를 표현한 것이다.

스크립트 alert를 표현하면



(script 표현)



위와 같이 된다.
이 데이터를 # 뒤에 붙여주기만 하면 된다.




(스크립트 데이터 전달)





(문제 해결)



이렇게 되면 페이지에서 스크립트가 실행되고 문제를 해결할 수 있다.

문제에서 준 힌트를 살펴보면 스크립트는 아래와 같다.



(스크립트)


callback에 foo라는 값이 전달되어 foo 라는 함수가 스크립트 아래에서 실행되고 있는 것을 확인해 볼 수 있다.
예를들어 내가 abc라고 입력을 하면



(abc 입력)



abc() 라는 함수가 실행된다.

이를 이용해보면 callback에 alert라고 입력을 하게되면


(alert() 함수 실행)



alert() 함수가 실행된다.

이 소스스크립트를 이용하면 위 경로의 주소를 복사해서 #뒤 경로로 적어주면 된다.
http://는 필터링 하고있으므로 Http:// 이렇게 대소문자를 섞어 써주면 필터링을 못하게 되어있으므로 우회할 수 있다.



(문제 해결)




6번문제 까지 모두 푸니 마지막으로 아래와 같이 축하(?)의 페이지가 뜬다.


(축하의 페이지)

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

XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15



@5번 문제

DOM에 스크립트를 삽입하지 않고 XSS 공격을 하는 문제이다.



(문제 화면)



여기서 Sign up 을 클릭해보면
아래와 같이 나온다.




(Sign up 화면)



여기서 URL을 잘 보면 next라는 변수에 confirm이라는 값이 들어가 있는 것을 확인 할 수 있다.
이따 코드를 보면서 이 부분이 어떤 역할을 하는지 확인 할 필요가 있다.
우선 이 페이지가 어떻게 동작하는지 확인해보자 이메일을 적고 Next를 눌러준다.



(Next 눌러준 화면)



그 다음 페이지 화면으로 시간이 조금 있으면 다시 원래 페이지로 돌아간다.
코드로 signup 페이지를 확인해본다.



(signup 페이지 코드)



코드를 보면 우리가 클릭하는 Next 버튼이 링크 태그로 걸려있는 것을 확인 할 수 있다.
또 링크 주소가 next 변수의 값으로 전달되고 있는 것을 확인 할 수 있다!
즉, 우리가 next변수 값으로 스크립트를 전달해 줄 수 있으면 된다.

그렇다면 URL로 스크립트를 전달하는 방법은?



(스크립트)



위와같이 주소창에 javascript: 입력 후 스크립트 코드를 입력해주면


(스크립트 동작)



스크립트가 동작한다.

우리는 이것을 이용하여 문제를 해결할 것이다.
next변수에 javascript:alert('attack'); 값을 전달하여 링크 주소를 세팅한다.





(링크 주소 세팅)



그 후 Next 버튼을 클릭해주면 스크립트가 실행되고
문제를 풀 수 있다.




(문제 해결)






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

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15




@ 4번 문제

인젝션 처럼 값을 조작해서 스크립트를 실행하게 하는 문제였다.




(문제 화면)



버튼을 클릭하면 타이머가 동작한다.



(타이머 동작)



3초가 지나고 다시 돌아온다.
잘보면 URL에 timer변수로 3이라는 값이 전달되고 있는것이 보인다.

GET방식으로 변수가 넘어가고있는데 코드를 보면 확인 할 수 있다.




(페이지 코드)



코드를 보면 GET방식으로 timer 변수가 넘어간다.
그래서 URL에 timer=3으로 입력하고 전달해도




(타이머 동작)



타이머가 동작한다.

이제 타이머 페이지의 코드를 보겠다.



(타이머 페이지 코드)



여기서 이미지 태그를 보면 바로 눈치챌수 있다.
바로 onload 부분에 우리가 입력한 timer 값이 들어가게 되니 여기를 잘 조작해서 입력하면
스크립트가 실행되게 할 수 있는 것이다.
{{ timer }} 이렇게가 변수로 입력이 되므로
timer=1');alert('attack
이라고 값을 전달하게 되면
onclick="startTimer('1');alert('attack');" 이렇게 완성되어 스크립트 코드가 실행 될 것이다.



(인젝션)



하지만 동작하지 않았다..
실행된 초 앞에 {{timer}} 값을 보면 1') 까지만 들어갔는데..
; (세미콜론)부터가 입력되지 않은것이다.

문제는 ; (세미콜론)을 URL 인코딩 해서 보내줘야한다. 세미콜론 퍼센트 앤퍼센드 등등
가끔 URL인코딩으로 보내줘야할 때가 있다.
; -> %3B로 바꿔서 입력해주니 아래와 같이
;(세미콜론)으로 잘 전달이 되어 우리가 원하는 {{ timer }} 값이 되었다.



(문제 해결)



그리고 스크립트 코드가 실행되었다.
문제 해결!



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

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15


@3번문제

코드를 잘 살펴봐야했던 문제였다.



(문제화면)





(문제 페이지)



문제 페이지를 보면 이미지 1, 2, 3 버튼을 클릭하면 이미지가 바뀌었다.



(그림변경)



여기서 눈치 챌수 있었던 부분은 url을 잘보면
/frame#2 -> 2번클릭
/frame#3 -> 3번클릭
이런식으로 넘어가고 있다는 것이다.
즉, url에 /frame#3으로 입력을하면



(3번그림)



3번그림이 화면에 나온다.

이제 코드를 들여다볼 차례이다.
코드를보면 html태그를 입력하는 부분이 있다..



(html 코드 추가부분)



이 부분에서 바로 눈치챘다.
Injection에서 늘 하던 거서럼 num 변수에 우리가 원하는 값을 입력하면 된다.
나는 여기서 onerror를 이용할 것이다.
<img src='없는파일.jpg' onerror='onerror("attack")'>를 이용한다.
그러기 위해 frame# 뒤에
5.jpg' onerror='onerror("attack")'>
를 입력해주었다.




(Injection)



그 결과 이미지5는 없으므로 에러가 나고
내가 원하던 스크립트가 실행되게 되었다.




(문제 해결)



이 문제에서는 스크립트 실행이 url로 전달되는 인자에 의해
실행될수 있다는 가능성을 알려주고있다.



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

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15


@레벨2

예전에 풀었지만 올리지 않았던 XSS 문제도 마저 올리도록 하겠다 :)
올리느라 다시한번씩 풀어보면서 기억이 새록새록했다.



(문제화면)



이번 문제는 게시판?형식의 페이지에 XSS 공격을 하는 것이었다.

아래는 문제 페이지이다.




(공격 대상 페이지)



일단, 기본적으로 <script> 구문을 이용해 Injection 하였다.




(XSS Injection)



결과는 실행되지 않았다.
<script> 구문을 필터링 하고 있을 가능성이 있다.
힌트를 보니 onerror를 이용하라고 나와있다.



(힌트)



바로 이게 결정적인 힌트였는데,
HTML에서 태그에서 onerror를 설정하여 실패하였을 때 동작하도록 하게 하는 것이 있다.
비슷한 것들로는
onsubmit -> submit 하였을때
onclick -> click하였을 떄
등 등 그렇다면 error를 낼 수 있는 부분은?

바로 img 태그 사용시 src의 경로에 해당 파일이 없을 때 에러를 낼 수 있다.
예를 들어
<img src=./123(없는경로)/> 태그 사용시 src에 파일이 없으니
onerror를 유발시킬 수 있다.
이를 이용해서




(XSS Injection)



인젝션하면




(문제 해결)




문제가 해결될 수 있다.
여기서 배운 점은
꼭 <script> 태그가 아니더라도 충분히 스크립트 코드를 실행시킬 수 있다는 점이다.
:)


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

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15


XSS 취약점을 공부한 후
이 것에 관해 직접 해보고 싶은 마음에
XSS Wargame을 여기저기 찾아본 결과
구글에서 만든 XSS GAME사이트라는 좋은 사이트를 찾게 되었다.

level1 부터 시작해볼것이다 :)

level1의 화면이다.



(문제 1 화면)



아래의 인터넷 창에서 alert()으로 팝업창을 띄우면 된다는 이야기이다.
스크립트코드로 alert() 코드를 띄운다는 것은
마음만 먹으면 악성 코드도 실행 시킬 수 있다는 것으로
분명 위험한 취약점이다.

먼저 아래 화면에서 Search 버튼을 눌러
사용자의 입력값이 어떻게 전달되는지 확인해보았다.



(전달 방식 확인)



확인해보니
url을 통해 전달되는 GET방식으로 전달 되고 있다.
또 화면에 Enter query here...  는 우리가 기본값으로 전달된 값임을 확인 할 수 있는데

더 정확하게 확인하기 위하여 소스코드를 분석해보았다.



(소스코드 분석)



코드를 보니 query라는 변수에 검색 입력값이 들어가고
화면에 뿌려주는 코드에서 query가 들어간것을 확인 할 수 있다.
이렇게 html코드에 들어가는 변수를 직접 사용자가 건들일 수 있다면
위험한 코드이다.
우리는 이부분을 이용하여 공격할 것이다.

query 변수에 들어가는 검색 입력란에
<script> alert("XSS");</script>
코드를 입력 할 것이다.



(XSS 공격)



검색을 하니 XSS 코드가 삽입되었고
팝업창이 떴다.



(공격 성공)



이렇게 level1은 간단히 넘어갈 수 있었다.



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

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31

+ Recent posts