본문 바로가기
정보보안/Web Hacking

[XSS] XSS(Cross Site Scripting)공격 실습 - (Dreamhack 실습예제)

by 우동이 2020. 7. 30.
300x250

XSS(CrossSiteScripting)

  •  서버의 응답에 공격자가 삽입된 악성 스크립트를 받은 사용자의 웹 브라우저에서 악성 스크립트가 실행되는 공격

XSS 공격을 수행하기 위해 요구되는 조건

  •  악성 script가 삽입될 수 있는 낮은 검증 수준
  •  정보가 웹 사이트에 출력될수 있는 낮은 검증 수준

 그 외 다양한  XSS 변종 기법 

  • Stored XSS : 게시판에 글을 작성하여 관리자에게 읽도록 유도하는 악성 script 실행 기법
  • Reflected XSS : 말 그대로 악성 script를 반사시킨다 주로 메일로 전송시키는 기법

Dreamhack의 XSS-1 문제입니다.

XSS 취약점에 관련된 웹 해킹 문제입니다.

제공된 사이트에 접속해보겠습니다.

 

 

/

/xss

/memo

/flag

세 개의 링크가 존재합니다.

csrf 문제 때와 비슷하게

xss에서는 취약점에 대한 힌트를 줄 것이며

flag에서는 공격코드를 작성해 입력할 것으로 보입니다.

 

 

/xss

접속하자마자 alert(1) 메시지가 출력되고 있습니다.

url에 존재하는 코드를 살펴보면

<script> alert(1)</script>

라는 문자열이 들어가 있습니다.

 

해당 문제에서는 별도의 필터링이 존재하지 않는 듯하며 

<script>, alert() 등 태그와 기능이 전부 정상적으로 작동하고 있습니다. 

 

/memo

/memo에서는 flag가 출력될 것입니다.

또한 url의 memo 부분에 넣은 메시지가 출력됩니다.

 

/flag

공격 코드를 삽입할 /flag입니다.

이제 코드를 살펴보겠습니다.

 

코드를 분석해본 결과 제 수준에서 알 수 있었던 것은

쿠키가 존재하는 걸로 봐서

공격코드로 쿠키를 탈취/변조해야 함과 동시에

아까 확인했듯 코드에 대한 필터링이 없다는 점이었습니다.

 

물론 Flask에 해박한 지식을 갖고 있다면 더 많은 걸 알 수 있겠지만,,

 

일단 필터링이 없다 -> <script> 문법을 사용 가능

cookie값을 활용해야 함 -> cookie값을 탈취/변조해야 함 

하지만 JavaScript에 document.cookie() 문법이 존재하는 걸 생각해보면

존재하는 계정의 cookie를 변조하기보다는 출력(탈취)해내는 게 맞는 것 같습니다.

<script>

alert("hello"); <!-- 메시지 출력 -->

document.cookie; <!-- 쿠키값 -->

location.href=""; <!-- ""내의 링크로 위치 이동 -->

document.location=""; <!-- "" 링크로 이동 -->

</script>

XSS에서 사용되는 네 가지 종류의 문법입니다.

각각의 기능은 주석으로 작성되어 있습니다.

이중 쿠키값을 출력하는 document.cookie와

location.href를 통해 memo에서 쿠키를 출력하도록 코드를 짜 보겠습니다.

<script>
location.href="/memo?memo="+document.cookie;
</script>

처음에는 document.cookie를 통해 쿠키값만 출력해주면 되는 게 아닌가 싶었고

location.href를 통해 memo로 위치를 이동해줘야 하는 이유가 조금 이해가 가질 않았었습니다.

지금도 정확히 아는 건지는 잘 모르겠지만

값이 출력될 수 있는 부분은 /memo 링크가 유일하기 때문에

location.href를 통해 /memo로 주소를 옮겨준 후

? memo=+document.cookie; 를 넣어

cookie값을 출력해주는 원리인 것 같습니다.

이상 감사합니다.

 

300x250

댓글