假设我连接到恶意攻击者托管的 wifi 热点。此外,假设我正在tmail.com
通过不安全的 HTTP 连接访问虚构电子邮件站点的登录页面。
我的问题是拥有 WiFi 热点的攻击者如何通过注入恶意 JavaScript 代码而不留下任何痕迹来窃取我的密码?tmail.com
当我访问它时,URL 是否仍会保持不变,还是会改变?攻击者究竟在哪里(应用层/网络层)以及如何(下载网页或修改网络层数据)使更改成功?
我问这个问题纯粹是为了教育目的。我只是好奇,无意伤害任何人。
假设我连接到恶意攻击者托管的 wifi 热点。此外,假设我正在tmail.com
通过不安全的 HTTP 连接访问虚构电子邮件站点的登录页面。
我的问题是拥有 WiFi 热点的攻击者如何通过注入恶意 JavaScript 代码而不留下任何痕迹来窃取我的密码?tmail.com
当我访问它时,URL 是否仍会保持不变,还是会改变?攻击者究竟在哪里(应用层/网络层)以及如何(下载网页或修改网络层数据)使更改成功?
我问这个问题纯粹是为了教育目的。我只是好奇,无意伤害任何人。
ISP(这里是 WiFi 热点)是向您提供页面的东西。ISP 读取不安全的流量当然是微不足道的:
现在让我们考虑这样一种情况,即使用 HTTPS 保护凭证提交(因此 ISP 无法立即嗅探它们),但 HTTPS 登录页面加载了一个不安全的脚本,helper.js
. ISP 可以在最终将脚本提供给浏览器之前将任何行为注入到该非 HTTPS 脚本中。例如,ISP 可以注入指令“当此页面提交凭据时,将它们的副本发送到” evil.example.com
。下图以绿色显示安全请求和响应,以其他颜色显示不安全请求/响应:
当您的浏览器通过 HTTP 请求helper.js
时,恶意 ISP 会使用包含错误内容的资源进行响应。您的浏览器不知道helper.js
应该是什么样子,并且没有任何完整性验证措施(如 HTTPS),浏览器不知道有什么问题。您的浏览器假定它已被正确提供http://tmail.com/helper.js
,因为这是它所要求的,并且 ISP 无任何投诉地发回了响应(例如,响应是 HTTP200
的/helper.js
)。您的浏览器获得的与真实服务器发送的不同这一事实完全无关紧要,因为您的浏览器无法检测到这种差异的发生。
根据您的评论,您似乎认为修改资源只能通过将浏览器重定向到另一个资源来完成。这是不正确的。考虑浏览器Bob 、 ISP的Iggy和两台服务器Alice和Mallory。
首先,考虑诚实的情况:
Bob 想知道 Alice 最喜欢的食物。
GET /favoritefood
到alice.com
.”GET /favoritefood
!alice.com
她说她喜欢披萨,但不喜欢洋葱。”现在让我们考虑一个不诚实的案例:
Bob 想知道 Alice 最喜欢的食物。
GET /favoritefood
到alice.com
.”301 Moved Permanently
——问马洛里爱丽丝最喜欢的食物”GET /favoritefood
from mallory.com
。这是一种不同的资源,Bob知道它与他最初要求的资源不同。在这种情况下,浏览器的地址栏将与您最初输入的不同:mallory.com/favoritefood
而不是alice.com/favoritefood
.
现在考虑这种情况:
Bob 想知道 Alice 最喜欢的食物。
GET /favoritefood
到alice.com
.”GET /favoritefood
收到了你的回复alice.com
!她说她喜欢吃很多很多的洋葱。”不涉及其他资源。http://alice.com/favoritefood
是这里获取的唯一资源;Iggy 只是对资源的内容撒谎。Bob 无法检测到 Iggy 在撒谎,因为没有完整性验证系统。
最后一次解释尝试:假设 ISP 是诚实的,但在传递 HTML 文件的内容时错误地翻转了一点。当然,您不会期望这样的错误会导致网页在不同的域下加载。现在假设诚实的 ISP 错误地翻转了两位而不是一位:同样,这样的错误永远不会导致域或资源路径发生变化。现在假设 ISP 错误地翻转了 2000 位(也许 ISP 某个地方的开关有问题,或者 WiFi 路由器被宇宙射线击中):同样,不需要更改域。现在假设更改是恶意而不是错误地进行的:同样,意图的更改不会导致实际发生的事情发生变化。浏览器地址栏中标识的资源路径和来源保持不变,
我假设 tmail.com 上的登录表单将使用 https 发送。否则,您可以使用数据包检查器读取纯密码。
您的浏览器从 tmail.com 加载网页。wifi 拥有者可以在此页面中添加 JavaScript。该脚本会将您键入的任何内容记录到邮件提供商的登录表单中并将其存储在某处。
当我访问此 URL 时,URL 是否仍保留为 tmail.com 还是会更改?
是的,它看起来都一样。但是页面源代码包含额外的 JavaScript。
攻击者究竟在哪里(应用层/网络层)以及如何(下载网页或修改网络层数据)使更改成功?
在应用层他会改变网页。
更新
为了更好地理解,您可能希望获取mitmproxy.org并使用替换工具:
:~q:</html>:<script>alert('hi')</script></html>
这将为所有通过的 html 页面添加一个 JavaScript。