2013-05-17 148 views
0

我目前正在建设一个客户Authenication包,而无需使用任何库只是为了了解该协议真的,我送我的计算验证数据包时,由接入混淆拒绝回答MySQL服务器。 Mysql服务器只是一台运行在我的计算机上的本地服务器,用于测试目的。这里是我发送的信息:MySQL协议客户端/服务器Authenication - 令牌生成从客户端

测试密码是'花生'。

阶段1个散列 = b14ab480028768cb748fd97de56144a304eb8a1a

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

盐&阶段2哈希 = RC8/$一个VR \ W |?.jN)〜cVcfd62797ed464c2843942a9167cc0521779d68862

SHA1(盐+ 2阶段散列)XOR阶段1个散列 = 4B19199ECEB929469EA89C0E942D8D5B9ACBE237

字符串发送到服务器进行验证,以十六进制:

\ X3A \ X00 \ X00 \ X01 - 斯坦DARD报头(有效负载长度/序列号)

\ 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 - 标记的长度(20个字节)

\ X4B \ X19 \ X19 \ x9E \ XCE \ xB9 \ X29 \ X46 \ x9E \ xA8 \ x9C \ x0E \ X94 \ X2D \ x8D \ x5B \ x9A \ XCB \ XE2 \ X37 - 令牌

当我把这个字符串,服务器刚刚送出#28000访问被拒绝的错误。

这可能是一个访问权限问题?试图获得root访问权限的远程用户,是否需要启用?

我已经改变WAIT_TIMEOUT/connect_timeout等,并仍然没有喜悦,这些被设置成60秒]连接超时设置。

我不确定是否应该用星号或不用来计算SHA1(Salt + Stage 2 Hash),就像在数据库中显示密码之前的*一样。我已经尝试了两种方式,但它仍然没有验证。

我现在已经没有想法了,唯一能做的另一件事就是编写另一个程序来处理客户端令牌作为Mysql服务器,但我想我会首先仔细检查这里。

我一直在这个工作了一段时间,很难过。

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

问候

詹姆斯

回答

0

没有寻找到的协议文档自己很难在这里看到的任何错误。它可以是从排序到错误的填充,长度和其他计算等任何事情。服务器没有提供有关登录失败原因的更多细节,因为这会将信息泄露给潜在的攻击者。

我建议你抓住MySQL源代码,看看他们是如何在他们的命令行应用程序中执行的。有关一些介绍和下载链接,请参阅http://dev.mysql.com/doc/internals/en/guided-tour.html

除此之外,总是有使用Wireshark记录网络流量的选项,以查看股票mysql客户端发送的内容,并将其与您拥有的内容进行比较。这可能有助于找出填充等。 请注意,如果您在Windows上工作,则可能会在本地主机上捕获流量时出现问题,因为IIRC Windows以某种方式快速切换流量,所以它无法通过Wireshark的网络接口查看。在这种情况下,您可能需要在虚拟机或其他机器上设置MySQL服务器。

+0

好的,谢谢你的快速回复。查看源代码是我的下一个端口,以模仿auth过程。所以我想我会从那里开始。请注意:我仍然接受其他建议。 – user2393236

+0

我认为我发送的关于填充等是正确的,因为它基本上取自内部网站,请参阅下面的内容:http://dev.mysql.com/doc/internals/en/protocol-examples.html – user2393236

+0

它看起来像尽管它已经被Mysql嗅探并发布在他们的网站上。问题是使用新的auth方法创建的令牌,我不知道我是否正确生成它。我正在下载源文件。顺便说一下,该网站参考。位于顶部,第二个客户端 - >服务器响应。 – user2393236