通过 XSS 发送电子邮件已读回执

信息安全 xss 同源策略
2021-09-02 08:14:52

我最近偶然发现了一种非常愚蠢/不安全但有趣的方式来获取电子邮件的已读回执。我不是 100% 确定使用的方法是否有效,这就是我在这里问它的原因。

G-mail 没有已读回执。所以,我从一家知名公司收到了这封电子邮件,这是一个值得信赖的来源,但 G-mail 阻止了页面上的图像。由于它来自受信任的发件人,因此我确实单击了“在此电子邮件中显示图片”。我没有看到那里的照片。在查看源代码时,我看到一个<img>带有指向链接的标签src,我认为这是一种了解我是否阅读了该消息的方法。

我的问题 :

  1. 这行得通吗?同源策略会阻止请求通过还是标签src中的<img>总是发出 GET 请求

  2. 这合法吗?有其他人在实践中看到过吗?如果不是,我很乐意向有关公司报告。


额外问题

如果这确实是可能的,那么为什么不这样: <img onload=alert('XSS') src="some-path.jpg">工作?

3个回答

这是一种相当普遍的做法,称为网络错误,这是邮件客户端不会自动加载外部图像的主要原因(第二个是保护您免于查看可能令人不安的不需要的垃圾邮件图像;例如,色情)。

基本上,当您加载启用了外部图像的电子邮件并且<img src='http://192.1.1.1/images/53512_58925.png'>源中包含指向图像的链接时,nginx当您的浏览器/邮件客户端获取和下载图像:

10.1.2.3 - - [10/Oct/2012:10:33:41 -0400] "GET /images/53512_58925.png HTTP/1.1" 200 1933 "http://192.1.1.1/images/53512_58925.png" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.81 Safari/537.1"

这给了他们:

  1. 您查看电子邮件的计算机的 IP 地址(10.1.2.3在本例中),
  2. 服务器时钟访问的时间戳[10/Oct/2012:10:33:41 -0400]
  3. 获取图像的(第一行)HTTP GET 请求(GET /images/53512_58925.png),
  4. HTTP 响应代码(200 表示成功),
  5. 正在访问的文件的大小(1933 字节),
  6. 文件的完整 URL(192.1.1.1 是电子邮件发件人服务器的 IP),以及
  7. 客户端的 User-Agent 字符串(指示您正在使用的 Web 浏览器和可能的操作系统)。

要真正准确地跟踪您,他们需要有一个唯一的图片 URL;例如,文件 53512_58925.png 可能意味着用户 58925 阅读了 ID 为 53512 或其他内容的电子邮件。他们还可以使用 HTTP GET 参数做一些事情,类似<img src='http://192.1.1.1/images/logo.png?user_id=58925&email_id=53512'>的事情也会被记录下来。

我不打算评论它的合法性。法律各不相同,而且我不住在的一些国家最近颁布了严格的 IT 隐私法(例如,在未经用户明确同意的情况下禁止类似的政策 cookie 跟踪)。此外,该论坛并非真正旨在提供法律建议。

这与同源策略无关(用于限制远程加载的客户端脚本在 javascript 等语言中的功能;所以去 unsafe-web-page.com 不应该能够读取/修改其他浏览器数据选项卡)或 XSS(攻击者利用漏洞在网页中注入不属于他们自己的内容)。

在电子邮件中嵌入图像将(如果未阻止)为 src 字段中链接的资源触发 HTTP GET。当它这样做时,可以获得普通的“谷歌分析级别”信息(+ IP),即Referrer、浏览器版本等。

如果资源不存在,那么在尝试解析它时,服务器端仍然会有一个 GET 的日志条目。

是的,它会起作用,我看不出它为什么是非法的。

但是,您已经遇到了这样做的主要问题 - 阅读电子邮件的人必须推送“在此电子邮件中显示图片”(或等效项)才能正常工作。

有些公司提供这项服务,例如SpyPigDidTheyReadIt