DOM XSS
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
DOM 취약점은 공격자가 제어하는 소스(예: location.search
, document.referrer
, 또는 document.cookie
)에서 데이터가 안전하지 않게 싱크로 전송될 때 발생합니다. 싱크는 악의적인 데이터가 주어질 경우 해로운 콘텐츠를 실행하거나 렌더링할 수 있는 함수나 객체(예: eval()
, document.body.innerHTML
)입니다.
소스는 공격자가 조작할 수 있는 입력으로, URL, 쿠키 및 웹 메시지를 포함합니다.
싱크는 악의적인 데이터가 부작용을 초래할 수 있는 잠재적으로 위험한 엔드포인트로, 스크립트 실행과 같은 결과를 초래할 수 있습니다.
위험은 데이터가 적절한 검증이나 정화 없이 소스에서 싱크로 흐를 때 발생하며, 이는 XSS와 같은 공격을 가능하게 합니다.
You can find a more updated list of sources and sinks in https://github.com/wisec/domxsswiki/wiki
일반적인 소스:
일반적인 싱크:
jQuery | |||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
|
| ``쿠키 조작 |
|
|
| |
|
|
| |
|
| ||
|
| `` | `` |
innerHTML
싱크는 최신 브라우저에서 script
요소를 허용하지 않으며, svg onload
이벤트도 발생하지 않습니다. 이는 img
또는 iframe
과 같은 대체 요소를 사용해야 함을 의미합니다.
이러한 종류의 XSS는 찾기 가장 어려운 유형일 가능성이 높습니다. JS 코드 내부를 살펴보고, 제어할 수 있는 값의 객체를 사용하는지 확인한 후, 이를 악용하여 임의의 JS를 실행할 수 있는 방법이 있는지 확인해야 합니다.
잠재적 싱크에 도달하는 모든 데이터를 확인하는 브라우저 확장: https://github.com/kevin-mizu/domloggerpp
출처: https://portswigger.net/web-security/dom-based/open-redirection
DOM에서의 오픈 리다이렉트 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 도메인 간 탐색을 시작할 수 있는 싱크에 기록할 때 발생합니다.
리다이렉션이 발생하는 URL의 시작 부분을 제어할 수 있다면 **javascript:alert(1)
**과 같은 임의의 코드를 실행할 수 있다는 점을 이해하는 것이 중요합니다.
싱크:
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
DOM 기반 쿠키 조작 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 쿠키의 값에 포함할 때 발생합니다. 이 취약점은 쿠키가 사이트 내에서 사용될 경우 웹페이지의 예기치 않은 동작을 초래할 수 있습니다. 또한, 쿠키가 사용자 세션 추적에 관여하는 경우 세션 고정 공격을 수행하는 데 악용될 수 있습니다. 이 취약점과 관련된 주요 싱크는:
Sinks:
From: https://portswigger.net/web-security/dom-based/javascript-injection
DOM 기반 JavaScript 주입 취약점은 공격자가 제어할 수 있는 데이터를 JavaScript 코드로 실행할 때 생성됩니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Document-domain manipulation vulnerabilities는 공격자가 제어할 수 있는 데이터를 사용하여 스크립트가 document.domain
속성을 설정할 때 발생합니다.
document.domain
속성은 브라우저의 same-origin policy 강제에 중요한 역할을 합니다. 서로 다른 출처의 두 페이지가 document.domain
을 같은 값으로 설정하면 제한 없이 상호작용할 수 있습니다. 브라우저는 document.domain
에 할당할 수 있는 값에 대해 특정 제한을 두지만, 실제 페이지 출처와 완전히 관련 없는 값을 할당하는 것은 방지합니다. 일반적으로 브라우저는 자식 또는 부모 도메인의 사용을 허용합니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoning는 스크립트가 제어 가능한 데이터를 WebSocket 연결의 대상 URL로 사용하는 경우 발생합니다.
Sinks:
WebSocket
생성자는 WebSocket-URL poisoning 취약점으로 이어질 수 있습니다.
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOM 기반 링크 조작 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 현재 페이지 내의 탐색 대상에 기록할 때 발생합니다. 예를 들어 클릭 가능한 링크나 양식의 제출 URL이 있습니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Ajax 요청 조작 취약점은 스크립트가 XmlHttpRequest
객체를 사용하여 발행되는 Ajax 요청에 공격자가 제어할 수 있는 데이터를 기록할 때 발생합니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
로컬 파일 경로 조작 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 파일 처리 API에 filename
매개변수로 전달할 때 발생합니다. 이 취약점은 공격자가 다른 사용자가 방문할 경우 사용자의 브라우저가 임의의 로컬 파일을 열거나 작성하도록 유도하는 URL을 구성하는 데 악용될 수 있습니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
클라이언트 측 SQL 인젝션 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 안전하지 않은 방식으로 클라이언트 측 SQL 쿼리에 포함할 때 발생합니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
HTML5-storage manipulation 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 웹 브라우저의 HTML5 저장소(localStorage
또는 sessionStorage
)에 저장할 때 발생합니다. 이 작업 자체는 본질적으로 보안 취약점이 아니지만, 애플리케이션이 이후에 저장된 데이터를 읽고 안전하지 않게 처리할 경우 문제가 됩니다. 이는 공격자가 저장 메커니즘을 활용하여 교차 사이트 스크립팅 및 JavaScript 주입과 같은 다른 DOM 기반 공격을 수행할 수 있게 할 수 있습니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
DOM 기반 XPath 주입 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 XPath 쿼리에 포함할 때 발생합니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
DOM 기반 JSON 주입 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 JSON 데이터 구조로 구문 분석되고 애플리케이션에 의해 처리되는 문자열에 포함할 때 발생합니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
웹 메시지 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 웹 메시지로 다른 문서에 전송할 때 발생합니다. 취약한 웹 메시지 조작의 예는 PortSwigger의 웹 보안 아카데미에서 찾을 수 있습니다.
Sinks:
웹 메시지를 전송하기 위한 postMessage()
메서드는 수신 메시지에 대한 이벤트 리스너가 수신 데이터를 안전하지 않게 처리할 경우 취약점으로 이어질 수 있습니다.
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
DOM 데이터 조작 취약점은 스크립트가 DOM 내의 필드에 공격자가 제어할 수 있는 데이터를 기록할 때 발생합니다. 이 데이터는 가시 UI 또는 클라이언트 측 로직에서 사용됩니다. 공격자는 이 취약점을 이용하여 다른 사용자가 방문할 경우 클라이언트 측 UI의 모양이나 동작을 변경할 수 있는 URL을 구성할 수 있습니다.
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
DOM 기반 서비스 거부 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 문제의 플랫폼 API에 안전하지 않게 전달할 때 발생합니다. 여기에는 호출될 때 사용자의 컴퓨터가 과도한 CPU 또는 디스크 공간을 소비하게 할 수 있는 API가 포함됩니다. 이러한 취약점은 브라우저가 localStorage
에 데이터를 저장하려는 시도를 거부하거나 바쁜 스크립트를 종료함으로써 웹사이트의 기능을 제한하는 등의 중대한 부작용을 초래할 수 있습니다.
Sinks:
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)