hacktricks/pentesting-web/xss-cross-site-scripting/dom-invader.md

100 lines
7.4 KiB
Markdown
Raw Normal View History

# DOM 침입자
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</a><strong>!</strong></summary>
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-01-01 17:15:42 +00:00
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를** 팔로우하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
## DOM 침입자
DOM 침입자는 Burp의 내장 브라우저에 설치된 브라우저 도구입니다. 웹 메시지 및 프로토타입 오염을 포함한 다양한 소스 및 싱크를 사용하여 **DOM XSS 취약점을 감지**하는 데 도움이 됩니다. 이 도구는 확장 프로그램으로 사전 설치되어 있습니다.
DOM 침입자는 브라우저의 DevTools 패널 내에 탭을 통합하여 다음을 가능하게 합니다:
1. DOM XSS 테스트를 위해 웹페이지에서 **제어 가능한 싱크 식별**을 제공하며 컨텍스트 및 살균 세부 정보를 제공합니다.
2. `postMessage()` 메서드를 통해 보낸 웹 메시지를 **기록, 편집 및 재전송**하여 DOM XSS 테스트를 수행합니다. DOM 침입자는 특수하게 제작된 웹 메시지를 사용하여 취약점을 자동으로 감지할 수도 있습니다.
3. **클라이언트 측 프로토타입 오염** 소스를 감지하고 위험한 싱크로 보내진 제어 가능한 가젯을 스캔합니다.
4. **DOM clobbering 취약점** 식별.
2024-02-10 21:30:13 +00:00
### 활성화하기
Burp의 내장 브라우저에서 **Burp 확장**으로 이동하여 활성화합니다:
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
이제 페이지를 새로 고치고 **Dev Tools**에서 **DOM 침입자 탭**을 찾을 수 있습니다:
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### 카나리아 삽입
이전 이미지에서 **임의의 문자 그룹인 카나리아**를 볼 수 있습니다. 이제 이를 웹의 다양한 부분(매개변수, 양식, URL 등)에 **삽입**하고 매번 검색을 클릭하십시오. DOM 침입자는 **카나리아가 이용될 수 있는 재미있는 싱크**에 끝났는지 확인합니다.
또한, **URL 매개변수 삽입** 및 양식 삽입 옵션은 **각 URL** 매개변수 및 **양식**에 **카나리아**를 자동으로 삽입하는 **새 탭**을 엽니다.
### 빈 카나리아 삽입
싱크가 존재할 수 있는 페이지의 잠재적인 싱크를 찾고 싶다면, 심지어 그것들이 취약하지 않더라도 **빈 카나리아를 검색**할 수 있습니다.
### 웹 메시지
DOM 침입자는 웹 메시지를 사용하여 DOM XSS를 테스트하는 기능을 제공합니다:
1. `postMessage()`를 통해 보낸 웹 메시지를 **기록**합니다. 이는 Burp Proxy의 HTTP 요청/응답 기록과 유사합니다.
2. DOM XSS를 수동으로 테스트하기 위해 웹 메시지를 **수정**하고 **재발송**합니다. 이는 Burp Repeater의 기능과 유사합니다.
3. DOM XSS를 탐지하기 위해 **웹 메시지를 자동으로 변경**하고 보냅니다.
2024-02-10 21:30:13 +00:00
#### 메시지 세부 정보
각 메시지에 대한 자세한 정보를 확인하려면 해당 메시지를 클릭하여 열면 됩니다. 이 정보에는 클라이언트 측 JavaScript가 메시지의 `origin`, `data`, 또는 `source` 속성에 액세스하는지 여부가 포함됩니다.
* **`origin`** : 메시지의 **원본 정보가 확인되지 않으면**, 임의의 외부 도메인에서 이벤트 핸들러로 **교차 출처 메시지를 보낼 수 있을 수 있습니다**. 그러나 확인되었다 하더라도 여전히 보안 취약할 수 있습니다.
* **`data`**: 여기에 페이로드가 전송됩니다. 이 데이터가 사용되지 않으면 싱크는 쓸모가 없습니다.
* **`source`**: 일반적으로 iframe을 참조하는 소스 속성이 원본 대신 유효성이 검사되는지를 평가합니다. 이것이 확인되었다 하더라도, 유효성 검사가 우회될 수 있다는 것을 보장하지는 않습니다.
#### 메시지 응답
1. **메시지** 보기에서 메시지를 클릭하여 메시지 세부 정보 대화 상자를 엽니다.
2024-02-10 21:30:13 +00:00
2. 필요한대로 **데이터** 필드를 편집합니다.
3. **보내기**를 클릭합니다.
2024-02-10 21:30:13 +00:00
### 프로토타입 오염
DOM 침입자는 **프로토타입 오염 취약점**을 검색할 수도 있습니다. 먼저, 이를 활성화해야 합니다:
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
그런 다음, **`Object.prototype`**에 임의의 속성을 추가할 수 있는 **소스를 검색**합니다.
무언가를 찾으면 **테스트** 버튼이 나타나 **찾은 소스를 테스트**할 수 있습니다. 클릭하면 새 탭이 열리고, 콘솔에서 객체를 만들어 `testproperty`가 있는지 확인하세요:
```javascript
let b = {}
b.testproperty
```
원본을 찾았다면 **가젯을 스캔**할 수 있습니다:
1. **DOM Invader**에서는 **DOM** 뷰에서 식별된 프로토타입 오염 소스 옆에 있는 **가젯 스캔** 버튼을 클릭하면 새 탭이 열립니다. 그럼 적합한 가젯을 찾기 위한 스캔이 시작됩니다.
2. 동시에 동일한 탭에서는 **DevTools** 패널에서 **DOM Invader** 탭이 열려야 합니다. 스캔이 완료되면 식별된 가젯을 통해 접근 가능한 싱크가 **DOM** 뷰에 표시됩니다. 예를 들어, `innerHTML` 싱크로 전달되는 `html`이라는 가젯 속성이 아래 예시에 표시됩니다.
## DOM clobbering
이전 이미지에서 **DOM clobbering** 스캔을 활성화할 수 있다는 것을 확인할 수 있습니다. 완료되면 **DOM Invader**가 **DOM clobbering 취약점을 검색**하기 시작합니다.
2024-02-10 21:30:13 +00:00
## 참고 자료
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)