Stage 1: 연습으로, 당신의 미션은 다음 위치에 있는 이미지를 사용하여 이 웹사이트의 외관을 훼손하는 것 입니다.
OWASP IMAGE의 주소는
. /images/logos/owasp.jpg
이며, 그 이미지는 다음과 같습니다.
풀이
Enter your name 에 아무거나 입력해보면 화면이 바뀝니다.
해당 위치의 소스를 보면 글자 그대로 적혀있는 것이 보입니다.
여기에 자바스크립트를 넣어 테스트해보겠습니다. 테스트할 스크립트는
<script> alert("chmodi"); </script>
입니다. 간단한 메시지 창을 띄우는 스크립트 입니다.
스크립트가 그대로 적히지만 실행은 안되네요. 페이지가 로딩되면서 실행 되야 하는데,
로딩이 끝난 상태에서 페이지의 내용만 변경되었기 때문에 alert() 가 실행이 안된 듯 합니다.
이번에는 <img> 태그를 이용해보겠습니다. 다음과 같이 입력해 주세요.
<img src="images/logos/owasp.jpg">
입력하고 나면 아래와 같이 페이지가 바뀝니다.
그 다음에 Submit Solution 을 누르면 문제는 풀립니다.
DOM??
DOM(Document Object Model)은 HTML 및 XML 문서를 처리하는 API입니다. 문서의 구조적 형태를 제공하므로 자바스크립트와 같은 스크립트 언어를 사용하여 문서 내용과 시각적 표현을 수정할 수 있습니다.
DOM은 HTML 문서의 요소(<html>, <body> 등)를 제어하기 위해 웹 브라우저에서 처음 지원되었다.
( 문서 객체 모델 - 위키백과, 우리 모두의 백과사전 )
즉, DOM Based XSS 은 웹 브라우저에 있는 DOM 을 이용한 XSS 공격으로 대표적으로 이 문제에서 사용한 <IMG src=…> 를 이용한 방법이 있습니다.
DOM Based XSS: <IMG src=...>의 경우 DOM API가 src의 내용을 읽어와서 페이지의 내용을 고침. 평소라면 정상적인 이미지로 고치겠지만, XSS라면 악의적인 스크립트로 페이지가 고쳐진다.
Reflected XSS: ?search=<script> alert("chmodi"); </script> 처럼 악의적인 URL로 접속을 유도하는 방식
Persisted(Stored) XSS: 악의적인 스크립트를 서버에 저장하여 해당 페이지를 불러올 때마다 악의적인 스크립트가 동작하는 방식
<script> alert(); </script> 는 사용하기에 따라 Reflected XSS 나 Persisted(Stored) XSS 로 보면 되겠습니다.