我在一个测试环境中尝试使用Wireshark来捕获传递给MySQL的凭据。我做了一些挖掘,我读到MySQL客户端在发送之前散列密码,即使是在未加密的情况下也是如此。因此,当我捕获包含凭据的数据包时,我希望看到明文的用户名和传递的散列密码,但这不是我所看到的。用户名是明文的,但密码不等于数据库中的散列密码。更奇怪的是,每次我登录时,包中的密码都会发生变化。
WireShark登录数据包#1:
MAX Packet: 16777216
Charset: utf8 COLLATE utf8_general_ci (33)
Username: root
Password: ada5be054b6a9b44eaa0d86e33fb9442e8af7169
Client Auth Plugin: mysql_native_passwordWireShark登录数据包#2:
MAX Packet: 16777216
Charset: utf8 COLLATE utf8_general_ci (33)
Username: root
Password: 78a85ed4ba56ae733057226fdc0a189b7672a0a7
Client Auth Plugin: mysql_native_passwordWireShark登录数据包#3:
MAX Packet: 16777216
Charset: utf8 COLLATE utf8_general_ci (33)
Username: root
Password: f097e87cbba8f39cbaa3403dd5f7c966e3ed3969
Client Auth Plugin: mysql_native_password我已经查看了MySQL文档,并在互联网上搜索,但似乎没有找到任何关于这方面的内容。有人有什么想法/想法吗?
谢谢你的帮忙!
发布于 2018-01-29 20:19:11
虽然不是MySQL方面的专家,但密码授权通常受到replay attack的保护,因此嗅探网络不应允许攻击者通过发送完全相同的数据进行授权。这通常是通过nonce完成的:服务器发送唯一的数据,因此客户端必须提供hash(nonce + password_hash)才能授权。在下一次连接时提供不同的随机数,必须发送不同的授权数据,因此以前的授权数据不能被重用。
还要注意,hash可能是hash of hash of hash of hash,并且在一个或多个步骤中包含salt,因此将发送的数据与已知密码进行比较需要知道确切的算法。
https://stackoverflow.com/questions/48477121
复制相似问题