gpt4 book ai didi

MySQL 协议(protocol)客户端/服务器身份验证 - 来自客户端的身份验证数据包的 token 生成

转载 作者:行者123 更新时间:2023-11-30 01:37:53 31 4
gpt4 key购买 nike

我目前正在构建一个客户端,不使用任何库,只是为了真正理解该协议(protocol),当我将计算出的身份验证数据包发送到 MySQL 服务器时,我对访问拒绝回复感到困惑。 Mysql 服务器只是在我的计算机上运行的本地服务器,用于测试目的。这是我发送的信息:

测试密码是“peanut”。

第 1 阶段哈希 = b14ab480028768cb748fd97de56144a304eb8a1a

第 2 阶段哈希 = fd62797ed464c2843942a9167cc0521779d68862 - 这是正确的,但数据库中没有 *。

盐和第 2 阶段哈希 = rC8/$a?Vr\W|.jN)~cVcfd62797ed464c2843942a9167cc0521779d68862

SHA1(盐 + 第 2 阶段哈希值)异或第 1 阶段哈希值 = 4B19199ECEB929469EA89C0E942D8D5B9ACBE237

发送到服务器进行身份验证的十六进制字符串:

\x3A\x00\x00\x01 - 标准 header (有效负载长度/序列号)

\x02\x04\x80\x00 - 兼容性标志

\x00\x00\x00\x01 - 最大数据包大小

\x08 - 字符集

\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 - 23 字节填充符

\x72\x6F\x6F\x74\x00 - 用户名零终止

\x14 - token 长度(20 字节)

\x4B\x19\x19\x9E\xCE\xB9\x29\x46\x9E\xA8\x9C\x0E\x94\x2D\x8D\x5B\x9A\xCB\xE2\x37 - token

当我发送此字符串时,服务器仅发出拒绝访问的 #28000 错误。

这可能是访问权限问题吗?远程用户试图获得 root 访问权限,我需要启用什么功能吗?

我已经更改了连接超时设置 wait_timeout/connect_timeout 等,但仍然不高兴,这些设置为 60 秒。

我不确定是否应该使用星号来计算 SHA1(盐 + 第 2 阶段哈希值),因为在数据库中,它在密码前显示一个 *。两种方法都试过了,还是不行。

我现在已经没有想法了,我唯一能想到做的另一件事就是编写另一个程序,它将像 Mysql Server 一样处理客户端 token ,但我想我应该先在这里仔细检查一下。

我已经为此工作了一段时间,但很困惑。

非常感谢任何帮助。我通常不会在论坛上发帖,所以这是一种新的体验,如果我没有遵守礼仪,抱歉。

问候

詹姆斯

最佳答案

如果不亲自查看协议(protocol)文档,很难发现这里有任何错误。它可能是从字节顺序到错误的填充、长度和其他计算等的任何内容。服务器理所当然地没有提供有关登录失败原因的更多详细信息,因为这会将信息泄露给潜在的攻击者。

我建议您获取 MySQL 源代码并查看他们如何在命令行应用程序中执行此操作。请参阅http://dev.mysql.com/doc/internals/en/guided-tour.html一些介绍和下载链接。

除此之外,始终可以选择使用 Wireshark 记录网络流量,以查看库存 mysql 客户端发送的内容并将其与您拥有的内容进行比较。这可能有助于找出填充等。请注意,如果您在 Windows 上工作,则在本地主机上捕获流量可能会出现问题,因为 IIRC Windows 以某种方式缩短流量,因此它不会通过网络接口(interface)让 Wireshark 看到。在这种情况下,您可能必须在虚拟机或不同的计算机上设置 MySQL 服务器。

关于MySQL 协议(protocol)客户端/服务器身份验证 - 来自客户端的身份验证数据包的 token 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16608572/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com