최근 몇 주전에 모사이트 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를 잘 적용하기위해선 발생가능한 환경을 잘 파악해두는 것이 첫번째이다.

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

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

11월 20일 오전 10시쯤 필기 합격 발표가 나왔다.

[정보보안기사/정보처리기사] 쌍기사를 목표로 6월부터 같이 준비를 했다.

정보보안기사가 중간에 코로나로 시험이 2개월 미뤄지는 바람에 반포기 상태였다....

정보보안기사는 2개월 전에 공부한 후 공부를 하지 않았기에 기대를 안했다.

그래서 인지 합격 발표를 보고서도 좋기보단 당황했다.

원인을 생각해보면 케이쉴드 주니어를 하고 있던게 영향을 어느 정도 받은거 같다.

 


필기 시험 준비

 정보보안 기사하면 이 책이 정석이지 않을까 싶다. 주위 준비하던 대부분의 사람이 이 책으로 공부하였고 나역시 고민없이 이책을 구매하여 사용하였다.

 

처음 목표는 이론서를 완독 후 1200제를 풀자! 였지만 양이 너무 방대했다.

특히 처음 나오는 암호에서는 그냥 접을까 까지 생각을 했다.

고민 끝에 1200제를 먼저 풀며 이론서를 보는 것으로 방향을 바꾸었다.

 

문제를 반복적으로 풀기위해 하루에 100문제씩 총 1200제 문제를 태블릿으로 찍어서 문제풀이를 하였다.

1회차에는 정답을 표기하지 않고 맞고 틀린것만 표기했다.

애매하게 알고있는 것 △, 아에 모르르는 것 X, 확실히 아는것 O로 구분하였다.

 

△,X가 60~70% 정도 되었던 것 같다.

△,X문제들의 개념들을 이론서를 확인하면서 왜 틀렸는지 분석을 했다. 

 

2회차에는 O인 문제는 빠르게 넘기고 △,X 문제들을 위주로 문제를 풀며 틀린 부분이 잘 보완이 됐는지 확인했다. 틀린문제의 30~40%정도가 보완이 됐다. 역시 한번 틀린건 머리에 잘 안들어 오는 것 같다....

 

3회차에서는 △,X 문제들을 다시 한번 빠르게 훑으려고 노력했다. 이때가 시험 미뤄지기전 기준으로 일주일? 정도 남았던 것같다. 3회차 작업을하다 미뤄졌다는 소식을 듣고 필기 공부를 때려쳤다.

 

 

필기 시험 

 시험 보기전날 11월 6일 "시험 접수는 했었으니까 책을 조금 보고 갈까"라는 생각을 했지만 심리적으로 포기 상태였기에 책이 눈에 들어오지 않았다. 기출 사이트에서 모의 기출문제 1회분을 풀어보고 아슬하게 합격점이 나왔다. 헛된 희망을 품고 11월 7일 필기 시험장으로 향했다. 시험보면서 불합격을 강하게 느꼈다. 모르는 문제나 헷깔리는 문제가 너무 많았다. 

시험을 보고난후 커뮤니티에서 답을 맞추는 것을 확인했는데 헷깔려던 문제들은 전부 틀리게 찍었다는 걸 확인 후 체념했다.

 

 

총평

9월달 지식으로 시험을 치뤘기에 기대를 전혀 안 한 시험이라 합격하고 꽤 당황했다.

그래도 정보기,정처기 쌍기사를 목표했는데 정처기는 최종합격하였고 정보기는 필기 합격을 했으므로 목표 한것을 어느 정도 이룬 것 같아 기쁘다.

필기는 운좋게 땄지만 실기는 어림도 없을 것 같다.

실기는 내년에 봐야징~

 

 

 

 

'자격증' 카테고리의 다른 글

2020 정보처리기사 3회 필기, 실기 합격 후기  (0) 2020.11.21

Stage #19


풀이

더보기

href에 자바스크립트를 넣으면 풀린다.

javacript:alert(document.domain)

정답

 javacript:alert(document.domain)

 

 

 

XSS Challenges CLEAR!!

 

 

'CTF > XSS Challenges' 카테고리의 다른 글

[XSS Challenges] Stage #15  (0) 2020.11.21
[XSS Challenges] Stage #12  (0) 2020.11.19
[XSS Challenges] Stage #10  (0) 2020.11.19
[XSS Challenges] Stage #9  (1) 2020.11.19
[XSS Challenges] Stage #8  (0) 2020.11.19

Stage #15


풀이

더보기

document.write()는 자바스크립트 출력물이다.

 

Stage #15는 <>를 필터링하고 있지만 document.write()는 \x3c,\x3e를 <>로 해석한다.

console 출력 결과

 이를 이용하여 스크립트를 작성한다.

정답

  \\x3cimg src=1 onerror=alert(document.domain)\\x3e

 

 

 

 

 

 

 

'CTF > XSS Challenges' 카테고리의 다른 글

[XSS Challenges] Stage #19  (0) 2020.11.21
[XSS Challenges] Stage #12  (0) 2020.11.19
[XSS Challenges] Stage #10  (0) 2020.11.19
[XSS Challenges] Stage #9  (1) 2020.11.19
[XSS Challenges] Stage #8  (0) 2020.11.19

2020년 11월 12일

정처기 실기를 합격함으로써 준비 4개월만에 동회차 합격에 성공했다.

 

나름 공부를 한다고 했지만 학습량이 다른 사람에 비해 그리 많지는 않았다. ㅡㅡ;;

필기는 어느정도 열심히 공부했지만 실기는 실제 준비기간이 1주? 정도 되었다. 

 

다른 사람들과 비교했을때 "나는 이만큼 공부했다" 자랑 할 정도는 안된다.

그래서 나와 같은 전공자 입장에서 어떻게 준비 해야하는지 적어보려한다.

만약 전공자가 아니라면 이 글은 큰 도움이 되지는 않을 것이다.

 

간신히 60점 커트로 합격 했다....


필기

필기 준비

 [수제비 책 + 시나공 + 기출문제] 로 공부하였다. 

실기를 수월하게 하고싶으면 필기를 잘해놓는게 중요하다. 실기 문제가 키워드 설명을 중심으로 나오기 때문에 필기를 대충 한다면 그만큼 실기 준비는 배로 늘어나게 된다. 전공자들이 실기에서 코딩, SQL을 못해서 떨어지는 경우는 거의없다. 필기 만큼은 조금이라도 더 열심히 준비하자. 수제비 책 3회독+@(읽기 + 문제풀이) + 시나공 1회독(읽기)를 하였다.

1회독

 거의 한달 반이 걸렸다. 하루에 1챕터씩 목표로 총 21챕터를 3주를 계획했으나 어림도 없었다. 익숙하지 않은 개념이 많아 눈에 잘 안들어왔지만 최대한 이해한다는 마인드로 문제를 눈으로 풀며 1회독을 마쳤다.

2회독

 2주가 안걸린 것 같다. 2회차는 부족한 부분이 어디인지를 중점으로 보려 노력했고 이때는 문제집에 정답을 쓰지는 않고 틀린 것들은 따로 표시해두어 어디서 빵꾸나는지를 파악했다.

시나공 1 회독

 수제비 3회독에 들어가기전 2회차 정처기 필기를 본 친구에게 시나공 책을 받았다. 받은 김에 쭉 한 번 훑어보며 수제비와 다른 점이 있나 비교했다. 개인적으로 느낀건 수제비만 있어도 충분한 것 같다. 

3회독

 수제비 3회독에 들어가면서 맞은 문제들은 정답을 표기해가면 풀었다. 그러나 틀린 문제들은 정답을 표기하지 않았다. 이때부터는 내가 어디가 약한지 정확히 파악이 가능했고 그 부분들을 중점으로 봤다.

+@

 시험기간이 일주일이 다가오고 기출문제에서도 기존에 빠진 과목을 제외하고 나온다는 친구의 말을 듣고 기출 어플을 받아 몇 가지 풀어보았다. 또한 3회독 이후부터는 책을 한번 훑는데 걸리는 시간이 하루도 걸리지 않았기에 틈틈히 책을 반복해서 읽었다.  

 

필기 시험 

 시험 보기 하루전날되서는 필기에서 떨어질 자신이 없었다. 반복해서 읽으면서 부족한 개념들 위주로 반복 학습했다. 문제를 풀어봐도 여유 있게 합격 점수가 나왔다. 시험 당일날 모르는 문제가 좀 나왔지만 그걸 제외하더라도 무조건 합격이다라는 확신이 들었고 여유롭게 필기에 합격하였다.

 


실기

실기 준비

 실기준비는 필기 준비에 비해서는 정말 안하다 싶이했다. 수제비 실기책을 샀지만 20년도 실제 실기문제와 실기책 문제의 괴리감이 너무커 신뢰가 가지 않았다. 실기책 이론만 1회독 한 후 문제를 풀다 극도로 비효율적이란 생각에 때려쳤다. 그리고 다음과 같은 근거로 새로운 전략을 세웠다.

 

1. 20년도 1,2회차 실기문제는 코딩, SQL을 제외하면 키워드 [단답형 or 약술] 문제가 대부분이다. 

 

2. 전공자 기준 코딩, SQL에 큰 시간을 투자할 필요가 없다.

 

3. 100점 필요 없다 60점 이상만 맞으면 된다.

 

키워드 [단답형 or 약술] 문제만 해결하면 실기는 문제 없다 생각했다. 단답형 예상 문제를 정리한 블로그에서 단답형과 그 약술을 반복적으로 보았다. 또한 그분이 해피캠퍼스에서 단답형 600문제 가량 정리해놓은 레포트를 팔길래 친구와 반반해서 구매한 후 시험보기 일주일 전 그것에만 투자 했다.

 

실기 시험

 예상은 정확하게 적중했다. 다만 공부시간이 일주일도 채 안된 나머지 약술 문제에서 정말 고생했다. 본 것에서 대부분 나오긴 했지만 눈으로만 봤었기에 대부분의 문제를 애매하게 적었다 ㅡㅡ; 

실기 시험에서 나에게 가장 큰 변수는 SQL이였다. SQL은 아주 기본적인 문제가 나왔다. 하지만 내 자신을 너무 믿었나보다 그 기본적인 3문제중 가장 어려운 한 문제를 맞고 정말정말 기초적인 2문제를 틀렸다... 아무리 자신있더라도 SQL은 직접 한번 씩 돌려보길 권장한다.

 


총평

 실기 준비기간이 짧았지만 어찌어찌 합격을 했다. 문제를 풀며 느낀점을 쓰고 마무리하겠다.

 

1. 20문제 중 엉터리 문제 3~4문제는 못푼다 생각하면된다.

 저거 포기해도 80점이니 크게 신경쓰진 말자.

 

2. 3~4문제를 제외하면 나머지는 생각보다 기본적인 문제들이 나온다.

 필기를 잘 해놓아야하는 이유이다. 필기가 튼튼하면 서술형 문제가 거의 없어 준비할때 편하다.

 

3. SQL + 코딩 전공자입장에서 쉽다. 그러나 방심하지 말자

특히 SQL은 한번쯤은 다 실행해보자 많이 안쓰니까 요상하게 헷깔린다. 

www.w3schools.com/sql/default.asp <= 여기 있는것만 다 해봐도 문제없이 다 풀 수 있다.

코딩은 쉽긴하지만 문제가 더티하게 나왔다. 꼼꼼히 보고 실수하지말자.

 

모두 정처기 잘 준비해서 합격하기 기원한다 홧팅! ^^;

'자격증' 카테고리의 다른 글

2020 정보보안기사 16회 필기 합격 후기  (1) 2020.11.21

Stage #12


풀이

더보기

힌트를 보자

<>"'를 필터링하는 것을 알 수 있다.

 

<>"를 사용하지 않고 XSS를 실행시켜야한다.

<>는 STAGE 6번을 이용하면 사용하지 않을 수 있지만 "를 사용을 안 할 수는 없다.

 

IE에서는 " 대신 숫자키[1] 옆에있는 `을 사용할 수 있다.

IE에서 다음과 같은 스크립트를 입력한다.

 

정답

 ` ` onfocus= alert(document.domain); autofous

 

 

 

 

 

 

'CTF > XSS Challenges' 카테고리의 다른 글

[XSS Challenges] Stage #19  (0) 2020.11.21
[XSS Challenges] Stage #15  (0) 2020.11.21
[XSS Challenges] Stage #10  (0) 2020.11.19
[XSS Challenges] Stage #9  (1) 2020.11.19
[XSS Challenges] Stage #8  (0) 2020.11.19

Stage #10

 


 

풀이

더보기

domain이란 문자열을 제거하고 있다.

 

domain 문자열 사이에 domain문자를 남기면 필터링 된 후 domain이라는 문자만 남는다.

 ex) do(domain)main

 

정답

"><script>alert(document.dodomainmain);</script>

 

 

 

 

 

 

 

'CTF > XSS Challenges' 카테고리의 다른 글

[XSS Challenges] Stage #15  (0) 2020.11.21
[XSS Challenges] Stage #12  (0) 2020.11.19
[XSS Challenges] Stage #9  (1) 2020.11.19
[XSS Challenges] Stage #8  (0) 2020.11.19
[XSS Challenges] Stage #7  (0) 2020.11.19

Stage # 9


풀이

더보기

UTF-7을 인코딩을 이용하여 푸는 문제다.

UTF-7이란 메일 시스템이 아스키 값으로 전송 되니때문에 이를 해결하기위하여 모든 문자를 아스키코드로 변환하하는 것이다.

 

이를 이용하여 XSS 스크립트문을 UTF-7으로 변경하고 인코딩된 스크립트문을 실행하면 풀어진다.

 

현재 chrome, IE, FireFox는 UTF-7을 지원하지 않으므로 풀 수가 없었다. ㅡ.ㅡ

 

 

 

 

 

 

'CTF > XSS Challenges' 카테고리의 다른 글

[XSS Challenges] Stage #12  (0) 2020.11.19
[XSS Challenges] Stage #10  (0) 2020.11.19
[XSS Challenges] Stage #8  (0) 2020.11.19
[XSS Challenges] Stage #7  (0) 2020.11.19
[XSS Challenges] Stage #6  (0) 2020.11.17

+ Recent posts