최근 몇 주전에 모사이트 XSS 취약점을 발견하여 보고하게 되었다.

 

버그바운티를 하면서 공부할때와 리얼월드는 XSS을 찾는 방법이 차이가 있다는 것을 느꼈다.

아직 누군가에게 설명할 정도는 아니지만 초보자의 입장에서 어떻게해서 어떻게 XSS를 발견했는지를 적어보려한다.

 

 

XSS 진단

보통 XSS를 처음 공부하면 <script>alert(1)</script>식의 alert()함수를 터트리는 치트시트로 점검해야한다 생각한다.

 

alert()함수를 터트린 XSS스크립트

 

 

 

하지만 실제 웹사이트에서는 기본적인 것들은 이미 보호가 되어있어 alert()함수를 떡하니 띄어주지 않는다. alert()함수 성공 유무로 XSS를 진단 하는 것은 오래된 사이트가 아니라면 기대하기 힘들다.  alert()함수가 아닌 브라우저의 스트립트 오류를 유도하여 XSS발생 가능성을 확인하는 것이 선행되야한다.

 

XSS는 기본적으로 웹페이지에 의도치않은 스크립트가 삽입되어 발생한다.  XSS가 적용된다는 것은 <>"'--> 등 스크립트에 사용되는 문자에 의해 오류가 발생될 수 있는 환경이라는 것이다. alert()를 띄우는 것은 모든 조건이 맞아야 실행되지만 특정 문자로인한 스크립트 오류는 상대적으로 확인하기 쉽다. 

 

그렇기에 기본 치트시트 보다는 여러환경에서 오류를 확인할 수 있는 XSS polyglots 치트시트를 추천한다.

또한 XSS오류가 발생했는지 개발자도구를 통해 쉽게 확인할 수가 있다. 

 

XSS Polyglots

XSS Polyglots이란 다양한 환경에서 XSS발생 가능성을 확인하기위해 이를 유도하는 구문을 한줄로 정리한 것이다. 

XSS 치트시트는 각 환경에서 alert()를 테스트할 목적으로 각 상황별 여러 가지의 스크립트를 모아 두었다면 XSS Polyglots은 모든 상황에서 쓰일 수 있는 구문을 담기위해 노력한 스크립트라고 생각하면된다.

 

GitHub에서 Polyglots예시를 가져왔다.

github.com/0xsobky/HackVault/wiki/Unleashing-an-Ultimate-XSS-Polyglot

 

0xSobky/HackVault

A container repository for my public web hacks! Contribute to 0xSobky/HackVault development by creating an account on GitHub.

github.com

6가지의 XSS 가능성을 제시한 polyglots 스크립트이다.

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

 

다음과 같은 6가지 XSS가능성을 점검한다.

  • jaVasCript:: A label in ECMAScript; a URI scheme otherwise.
  • /*-/*`/*\`/*'/*"/**/: A multi-line comment in ECMAScript; a literal-breaker sequence.
  • (/* */oNcliCk=alert() ): A tangled execution zone wrapped in invoking parenthesis!
  • //%0D%0A%0d%0a//: A single-line comment in ECMAScript; a double-CRLF in HTTP response headers.
  • </stYle/</titLe/</teXtarEa/</scRipt/--!>: A sneaky HTML-tag-breaker sequence.
  • \x3csVg/<sVg/oNloAd=alert()//>\x3e: An innocuous svg element.

많은 상황을 커버 할 수 있는 스크립트를 제작한다면 하나의 스크립트로 한번에 여러가지 XSS가능성을 점검할 수 있을 것이다.

 

XSS Polyglots 활용법

XSS Polyglots이 적용됐는지는 개발자 도구를 통해 쉽게 확인 할 수 있다.

실제 사이트에 적용되는 곳을 찾았다 해도 함부로 공개할 수 없기에 연습용 사이트를 참고했다.

위의 스크립트에서 alert() 제외하고 XSS를 찾아보겠다.

사용한 스크립트이다.

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk= )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=//>\x3e

 

xss-quiz.int21h.jp/

 

XSS Challenges (by yamagata21) - Stage #1

XSS Challenges Stage #1 Notes (for all stages): * NEVER DO ANY ATTACKS EXCEPT XSS. * DO NOT USE ANY AUTOMATED SCANNER (AppScan, WebInspect, WVS, ...) * Some stages may fit only IE. Ranking (optional): If you want to participate in ranking, please register

xss-quiz.int21h.jp

svg상황에서 XSS발생 가능성이 있다는 것을 확인할 수 있다.

 

스크립트를 적용한 이미지

이렇게 대놓고 적용된다고 안뜨더라도 스크립트의 영향으로 오류가 발생하였다면 크롬 개발자 도구에서 콘솔창에 오류가 있는 페이지를 띄어준다. 마땅한 예시를 찾는다면 업데이트를 하겠다.

 

 

정리

XSS Polygolts -> 오류발생 or 스크립트 발생 확인 -> 검증 스크립트 유도

기본적인 XSS 진단은 3가지 프로세스를 사용하여 XSS취약점을 발견하였다.

XSS를 잘 적용하기위해선 발생가능한 환경을 잘 파악해두는 것이 첫번째이다.

예전에 비해 웹사이트 보안이 강화되어 찾기 어렵게 됐지만 아직 잘 찾아보면 한두개는 존재하는 것 같다.

찾는데 시간이 오래걸리지만 찾으면 용돈도 되고 스펙도 되니 모두 잘 노력해서 찾아보자

+ Recent posts