DOM XSS
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
DOM 漏洞发生在来自攻击者控制的 源(如 location.search
、document.referrer
或 document.cookie
)的数据不安全地传输到 接收点。接收点是可以执行或渲染有害内容的函数或对象(例如 eval()
、document.body.innerHTML
),如果给定恶意数据。
源 是可以被攻击者操控的输入,包括 URL、cookie 和网页消息。
接收点 是潜在危险的端点,恶意数据可能导致不良后果,例如脚本执行。
当数据从源流向接收点而没有适当的验证或清理时,风险就会出现,从而使攻击如 XSS 成为可能。
您可以在 https://github.com/wisec/domxsswiki/wiki 找到更更新的源和接收点列表
常见源:
常见的接收点:
location
eval()
scriptElement.src
add()
location.host
Function() constructor
scriptElement.text
after()
location.hostname
setTimeout()
scriptElement.textContent
append()
location.href
setInterval()
scriptElement.innerText
animate()
location.pathname
setImmediate()
someDOMElement.setAttribute()
insertAfter()
location.search
execCommand()
someDOMElement.search
insertBefore()
location.protocol
execScript()
someDOMElement.text
before()
location.assign()
msSetImmediate()
someDOMElement.textContent
html()
location.replace()
range.createContextualFragment()
someDOMElement.innerText
prepend()
open()
crypto.generateCRMFRequest()
someDOMElement.outerText
replaceAll()
XMLHttpRequest.open()
FileReader.readAsArrayBuffer()
someDOMElement.name
wrap()
XMLHttpRequest.send()
FileReader.readAsBinaryString()
someDOMElement.target
wrapInner()
jQuery.ajax()
FileReader.readAsDataURL()
someDOMElement.method
wrapAll()
$.ajax()
FileReader.readAsText()
someDOMElement.type
has()
XMLHttpRequest.setRequestHeader()
FileReader.root.getFile()
someDOMElement.cssText
init()
XMLHttpRequest.open()
FileReader.root.getFile()
someDOMElement.codebase
index()
jQuery.globalEval()
someDOMElement.href
someDOMElement.outerHTML
$.parseHTML()
localStorage.setItem()
document.evaluate()
document.writeln()
$.parseJSON()
executeSql()
postMessage()
``
``
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 中的开放重定向漏洞 发生在脚本将攻击者可以控制的数据写入能够跨域导航的接收点时。
理解执行任意代码(例如 javascript:alert(1)
)是可能的,如果您控制重定向发生的 URL 开头,这是至关重要的。
接收点:
来自: https://portswigger.net/web-security/dom-based/cookie-manipulation
基于DOM的cookie操控漏洞发生在脚本将攻击者可以控制的数据纳入cookie的值时。如果cookie在网站内被使用,这种漏洞可能导致网页出现意外行为。此外,如果cookie涉及用户会话跟踪,它可以被利用来进行会话固定攻击。与此漏洞相关的主要汇聚点是:
Sinks:
来自: 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
属性时。
document.domain
属性在浏览器的 同源策略 的 执行 中发挥着 关键作用。当来自不同源的两个页面将它们的 document.domain
设置为 相同的值 时,它们可以不受限制地进行交互。尽管浏览器对可分配给 document.domain
的值施加了某些 限制,防止将完全不相关的值分配给实际页面源,但仍然存在例外。通常,浏览器允许使用 子域 或 父域。
Sinks:
来自: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoning 发生在脚本将 可控数据作为 WebSocket 连接的目标 URL 使用时。
Sinks:
WebSocket
构造函数可能导致 WebSocket-URL poisoning 漏洞。
来自: https://portswigger.net/web-security/dom-based/link-manipulation
DOM-based link-manipulation vulnerabilities 出现于脚本将 攻击者可控的数据写入当前页面的导航目标,例如可点击的链接或表单的提交 URL。
Sinks:
来自: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Ajax请求操控漏洞 出现于脚本将 攻击者可控的数据写入使用 XmlHttpRequest
对象发出的Ajax请求 时。
Sink:
来自: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
本地文件路径操控漏洞 出现于脚本将 攻击者可控的数据传递给文件处理API 作为 filename
参数。攻击者可以利用此漏洞构造一个URL,如果另一个用户访问该URL,可能导致 用户的浏览器打开或写入任意本地文件。
Sinks:
来自: 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 vulnerabilities 出现于脚本 在网页浏览器的 HTML5 存储中存储攻击者可控的数据 (localStorage
或 sessionStorage
)。虽然此操作本身并不是安全漏洞,但如果应用程序随后 读取存储的数据并不安全地处理它,则会变得有问题。这可能允许攻击者利用存储机制进行其他基于 DOM 的攻击,例如跨站脚本和 JavaScript 注入。
Sinks:
来自: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
基于 DOM 的 XPath 注入漏洞 发生在脚本将 攻击者可控的数据纳入 XPath 查询 时。
Sinks:
来自: 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
Web-message vulnerabilities 在脚本将 攻击者可控的数据作为网络消息发送到浏览器内的另一个文档 时出现。一个 示例 的易受攻击的Web消息操控可以在 PortSwigger的网络安全学院 找到。
Sinks:
postMessage()
方法用于发送网络消息,如果接收消息的事件监听器以不安全的方式处理传入数据,则可能导致漏洞。
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
DOM-data manipulation vulnerabilities 在脚本将 攻击者可控的数据写入DOM中的一个字段 时出现,该字段在可见的UI或客户端逻辑中被使用。攻击者可以利用此漏洞构造一个URL,如果其他用户访问该URL,可以改变客户端UI的外观或行为。
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
基于DOM的拒绝服务漏洞发生在脚本将攻击者可控的数据不安全地传递给有问题的平台API时。这包括在调用时可能导致用户计算机消耗过多的CPU或磁盘空间的API。这类漏洞可能会产生显著的副作用,例如浏览器通过拒绝尝试在localStorage
中存储数据或终止繁忙的脚本来限制网站的功能。
Sinks:
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)