DOM Invader
Reading time: 6 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
DOM Invader
DOM Invader는 Burp Suite의 내장 Chromium 브라우저에 설치된 브라우저 도구입니다. 이 도구는 DOM XSS 및 기타 클라이언트 측 취약점(프로토타입 오염, DOM 클로버링 등)을 자동으로 JavaScript 소스 및 싱크를 계측하여 감지하는 데 도움을 줍니다. 이 확장은 Burp와 함께 제공되며 활성화만 하면 됩니다.
DOM Invader는 브라우저의 DevTools 패널에 탭을 추가하여 다음을 수행할 수 있습니다:
- 실시간으로 제어 가능한 싱크를 식별하고, 컨텍스트(속성, HTML, URL, JS) 및 적용된 정화 정보를 포함합니다.
postMessage()
웹 메시지를 기록, 편집 및 재전송하거나 확장이 자동으로 변형하도록 할 수 있습니다.- 클라이언트 측 프로토타입 오염 소스를 감지하고 가젯→싱크 체인을 스캔하여 즉석에서 PoC를 생성합니다.
- DOM 클로버링 벡터를 찾습니다(예: 전역 변수를 덮어쓰는
id
/name
충돌). - 풍부한 설정 UI를 통해 동작을 미세 조정합니다(사용자 정의 카나리, 자동 주입, 리디렉션 차단, 소스/싱크 목록 등).
1. 활성화하기
.png)
- Proxy ➜ Intercept ➜ Open Browser (Burp의 내장 브라우저)를 엽니다.
- Burp Suite 로고(오른쪽 상단)를 클릭합니다. 숨겨져 있다면 먼저 퍼즐 조각을 클릭합니다.
- DOM Invader 탭에서 Enable DOM Invader를 켜고 Reload를 누릅니다.
- DevTools를 열고(
F12
/ 오른쪽 클릭 ➜ 검사) 고정합니다. 새로운 DOM Invader 패널이 나타납니다.
Burp는 프로필별로 상태를 기억합니다. 필요시 *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...*에서 비활성화할 수 있습니다.
2. 카나리 주입하기
카나리는 DOM Invader가 추적하는 임의의 마커 문자열(예: xh9XKYlV
)입니다. 다음을 수행할 수 있습니다:
- 복사하여 매개변수, 양식, 웹 소켓 프레임, 웹 메시지 등에 수동으로 주입합니다.
- Inject URL params / Inject forms 버튼을 사용하여 카나리가 모든 쿼리 키/값 또는 양식 필드에 자동으로 추가되는 새 탭을 엽니다.
- 빈 카나리를 검색하여 모든 싱크를 노출시킵니다(정찰에 유용).
사용자 정의 카나리 (2025+)
Burp 2024.12는 카나리 설정을 도입했습니다(Burp 로고 ➜ DOM Invader ➜ 카나리). 다음을 수행할 수 있습니다:
- 무작위화하거나 사용자 정의 문자열을 설정합니다(다중 탭 테스트에 유용하거나 기본값이 페이지에 자연스럽게 나타날 때).
- 값을 클립보드에 복사합니다.
- 변경 사항은 Reload가 필요합니다.
3. 웹 메시지 (postMessage
)
Messages 하위 탭은 모든 window.postMessage()
호출을 기록하며 origin
, source
, data
사용을 보여줍니다.
• 수정 및 재전송: 메시지를 더블 클릭하고 data
를 편집한 후 Send를 누릅니다(Burp Repeater와 유사).
• 자동 퍼징: 설정에서 Postmessage interception ➜ Auto-mutate를 활성화하여 DOM Invader가 카나리 기반 페이로드를 생성하고 핸들러에 재생하도록 합니다.
필드 의미 요약:
- origin – 핸들러가
event.origin
을 검증하는지 여부. - data – 페이로드 위치. 사용되지 않으면 싱크는 무관합니다.
- source – iframe / window 참조 검증; 종종 엄격한 출처 확인보다 약합니다.
4. 프로토타입 오염
Settings ➜ Attack types ➜ Prototype pollution에서 활성화합니다.
작업 흐름:
- 탐색 – DOM Invader는 URL/쿼리/해시 또는 JSON 웹 메시지에서 발견된 오염 소스(
__proto__
,constructor
,prototype
)를 플래그합니다. - 테스트 – Test를 클릭하여
Object.prototype.testproperty
가 존재해야 하는 PoC 탭을 엽니다:
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
- 가젯 스캔 – DOM Invader는 속성 이름을 무작위로 시도하고 어떤 것이 위험한 싱크에 도달하는지 추적합니다(예:
innerHTML
). - 익스플로잇 – 가젯-싱크 체인이 발견되면 Exploit 버튼이 나타나 소스 + 가젯 + 싱크를 연결하여 경고를 트리거합니다.
고급 설정(톱니바퀴 아이콘):
- CSP / X-Frame-Options 제거하여 가젯 스캔 중 iframe이 작동 가능하도록 유지합니다.
- 별도의 프레임에서 스캔 기술을 사용하여
__proto__
와constructor
간섭을 피합니다. - 기술을 개별적으로 비활성화하여 취약한 앱에 맞춥니다.
5. DOM 클로버링
Attack types ➜ DOM clobbering을 전환합니다. DOM Invader는 id
/name
속성이 전역 변수 또는 양식 객체와 충돌하는 동적으로 생성된 요소를 모니터링합니다(<input name="location">
→ window.location
을 덮어씁니다). 사용자 제어 마크업이 변수 교체로 이어질 때마다 항목이 생성됩니다.
6. 설정 개요 (2025)
DOM Invader는 이제 Main / Attack Types / Misc / Canary 카테고리로 나뉘어 있습니다.
- Main
- Enable DOM Invader – 전역 스위치.
- Postmessage interception – 메시지 로깅을 켜거나 끕니다; 자동 변형을 위한 하위 토글.
- Custom Sources/Sinks – 톱니바퀴 아이콘 ➜ 특정 싱크(예:
eval
,setAttribute
)를 활성화/비활성화하여 앱이 중단되지 않도록 합니다.
- Attack Types
- Prototype pollution (기술별 설정 포함).
- DOM clobbering.
- Misc
- Redirect prevention – 클라이언트 측 리디렉션을 차단하여 싱크 목록이 손실되지 않도록 합니다.
- Redirect 전에 중단점 – 리디렉션 직전에 JS를 일시 중지하여 호출 스택을 검사합니다.
- 모든 소스에 카나리 주입 – 카나리를 모든 곳에 자동 주입합니다; 구성 가능한 소스/매개변수 허용 목록.
- Canary
- 카나리 보기 / 무작위화 / 사용자 정의 카나리 설정; 클립보드에 복사합니다. 변경 사항은 브라우저 새로 고침이 필요합니다.
7. 팁 및 모범 사례
- 구별되는 카나리 사용 –
test
와 같은 일반 문자열을 피하십시오. 그렇지 않으면 잘못된 긍정이 발생합니다. - 무거운 싱크(
eval
,innerHTML
)는 탐색 중 페이지 기능이 중단되면 일시적으로 비활성화합니다. - Burp Repeater 및 Proxy와 결합 – 취약한 상태를 생성한 브라우저 요청/응답을 복제하고 최종 익스플로잇 URL을 작성합니다.
- 프레임 범위 기억 – 소스/싱크는 브라우징 컨텍스트별로 표시됩니다; iframe 내부의 취약점은 수동으로 집중해야 할 수 있습니다.
- 증거 내보내기 – DOM Invader 패널에서 오른쪽 클릭 ➜ Save screenshot을 클릭하여 보고서에 포함합니다.
References
- 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/dom-xss
- 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/dom-clobbering
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.