본문 바로가기

Penetration/WEB

[주요정보통신기반시설] 11. 크로스사이트 스크립팅

이번에 설명할 취약점은 취약점의 꽃 중 하나인 크로스사이트 스크립팅(XSS) 입니다.

해당 취약점은 공격자가 스크립트 구문을 삽입하였을 때 서버에서 이에 대한 필터링 없이 구문을 처리하면서 나타나는 취약점입니다.

 

대표적인 예시들은 우리들이 흔히 알고있는 <script>alert(1)</script>에서 시작합니다.

alert()는 javascript에서 사용되는 경고창을 띄우는 함수입니다. 이 글을 쓰는 동안에도 콘솔을 통해서 확인할 수 있습니다.

해당 화면에서 alert() 외에도 prompt(), confirm()과 같은 패턴들도 동일한 목적을 가지고 사용됩니다.

이제 이 부분에 대해서 구체적으로 활용하기 위해서 document.cookie를 삽입해줍니다. 

이와 같이 현재 사용자의 세션과 쿠키를 노출시킬 수 있습니다.

 

이 취약점의 경우 reflected와 stored로 나뉘며 서버에 입력한 반응을 확인하는지 혹은 서버에 저장된 형태로 스크립트 구문이 실행되는지를 통해서 구분합니다.

 

해당 취약점은 특정한 필터링을 이용한 보안대책을 통해서 공격자의 공격을 차단하기 때문에 여러가지 우회패턴을 가지고 있는 것이 좋습니다.(XSS cheetsheet를 공부하다보면 여러가지 패턴들을 익힐 수 있습니다.)

 

<script>alert(1)</script>
<svg/onload=alert(1)>
<img src=x onerror=alert(1)>
javascript:alert(1)
etc...

엄청나게 많은 패턴들이 존재합니다. 이외에 replace()만 사용했을 때

<scrscriptipt>alealertrt()</scrscriptipt>

 

혹은 대문자 등을 이용한 우회, 퍼센트 인코딩을 이용한 우회, 유니코드를 이용한 우회, 스페셜 케릭터를 이용한 우회 등등 정말 많은 패턴을 찾을 수 있습니다.

 

공격 성공여부를 가장 빠르게 판단하는 방법은 웹 프록시 도구를 이용했을 때 입력에 대한 응답으로 서버가 어떠한 형태로 입력한 구문을 받는지 확인해보는 방법이 있습니다. 설명할 것이 많은 취약점인 만큼 공격포인트도 다양하고 우회패턴도 다양하기 떄문에 이에 대해서는 워게임을 통해서 계속 살펴볼 예정입니다.

 

취약점에 대한 주요정보통신기반시설 가이드는 아래와 같습니다.

이상입니다.