DOM이란?
DOM은 Document Object Model의 줄임말로, 메모리에 웹 페이지 문서 구조를 트리 구조로 표현해서 웹 브라우저가 HTML 페이지를 인식하게 해주는 객체 모델을 의미한다. 또한 DOM 객체는 자바스크립트로 접근이 가능하다.
정의는 대충 이와 같고 간단하게 표현하자면 아래 이미지와 같다.
![]() |
![]() |
- 구조 : 각 HTML 요소(노드)가 트리처럼 계층적으로 연결되어 있다. 그리고 최상위 노드는 document 객체이다.
- 조작 : Javascript를 이용하여, 특정 요소를 선택하거나 변경이 가능하며 이벤트를 줄 수도 있다.(아래 예시 참조)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<p>hello</p>
<ol>
<li>1st</li>
<li>2nd</li>
<li>3rd</li>
</ol>
<script src="script.js"></script>
</body>
</html>
아래의 <script src="script.js"></script> 스크립트 태그를 통해 HTML 요소를 선택하거나 변경할 수 있다.
<요소 선택>
![]() |
var data = document.querySelector('p'); console.log(data.textContent); |
<요소 변경>
![]() |
var change = document.querySelector('p'); change.textContent = 'Good'; |
DOM Based XSS
DOM(Document Object Model)이 클라이언트가 이용하는 브라우저에서 조립되는 점을 이용하여, 자바스크립트를 통해 DOM을 조작하는 공격이다.
입력한 데이터가 그대로 결과로 나타나는 점에서 Reflected XSS와 유사하지만 데이터가 Response 패킷에 직접적으로 나타나지 않고, 브라우저에서 조립된다는 점이 다르다.
응답 패킷에서 직접적으로 데이터가 나타나지 않을 때에는 브라우저에서 어떻게 document가 조립되는지 패킷을 분석해야한다. 파라미터가 어떻게 전달 되는지, 변수 설정과 전달 방식은 어떻게 이루어졌는지 응답 패킷을 일일히 분석하는 것이 중요하다.
위의 이미지에서는 xss에 대한 검색 결과가 document.write(keyword+ '에 대한 검색 결과가 없습니다.');라고 나타나있는데, 특정 키워드를 찾는 것이 중요하다.
- document.write() -> 파라미터를 통해 데이터를 새로 작성
- innerHTML -> 태그를 새로 작성
'모의해킹 스터디 > Week11' 카테고리의 다른 글
XSS 취약점 해결 방안 (0) | 2024.07.03 |
---|