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