前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL登录验证的抓包

MySQL登录验证的抓包

作者头像
保持热爱奔赴山海
发布2019-09-18 08:10:03
1.4K0
发布2019-09-18 08:10:03
举报
文章被收录于专栏:数据库相关

理论知识部分摘录自:

http://blog.chinaunix.net/uid-9234131-id-5088292.html

http://blog.csdn.net/sissiyinxi/article/details/7660389

1.服务器端会随机生成一个random string发送给客户端;

2.客户端收到random string后,进行hash加密

第一步,将密码hash,得到hash值hash_stage1;  eg.hash_stage1=sha1("password");

第二步,二次hash,得到hash_stage2;  eg. hash_stage2=sha1(hash_stage1);

第三步,将密码二次hash得到的值与random string进行hash,得到hash_stage3; eg. hash_stage3=sha1("randomstring",hash_stage2);

第四步,异或处理准备发送给服务器端,得到reply=xor(hash_stage1,hash_stage3);

最后,将reply的值发送给服务器端。

3.服务器端收到reply后同样进行hash运算

第一步,将保存的hash形式的密码hashpassword与random string进行hash,得到server_hash_stage1=sha1("randomstring","hashpassword");

第二步,将客户端发送的reply与刚才得到的hash值进行异或运算,得到xor_value; eg. xor_value=xor(reply,server_hash_stage1);

第三步,将得到的异或值进行hash,得到server_hash_stage2; eg. server_hash_stage2=sha1(server_hash_stage1);

第四步,验证,将最后得到的hash值server_hash_stage2与保存的密码hashpassword进行比较。eg.   server_hash_stage2==hashpassword,相等则验证通过。

下图是我从mysql5.7.22代码里面截取的伪代码:

image.png
image.png

官方文档:

MySQL uses passwords in two phasesof client/server communication:

When a client attempts to connectto the server, there is an initial authentication step in which the client mustpresent a password that has a hash value matching the hash value stored in theuser table for the account the client wants to use.

After the client connects, it can(if it has sufficient privileges) set or change the password hash for accountslisted in the user table. The client can do this by using the PASSWORD()function to generate a password hash, or by using a password-generatingstatement (CREATE USER, GRANT, or SET PASSWORD).

> SELECT PASSWORD('Abcd@1234');   # mysql用户密码的计算方式:(hash方式)

+-------------------------------------------+

| PASSWORD('Abcd@1234')                     |

|-------------------------------------------|

|*47B150E012313114C04A1C9336709424085B6BD0 |

+-------------------------------------------+

使用wireshark抓取通过navicat登录虚拟机的mysql-5.7的部分截图:

wKioL1iv9b2g8NE6AACDo6iVsiQ601.png
wKioL1iv9b2g8NE6AACDo6iVsiQ601.png

第5~7个包是三次握手包。

第8个包:

wKioL1iv9b6jg0QwAAB-fiF67U8808.png
wKioL1iv9b6jg0QwAAB-fiF67U8808.png
wKiom1iv9eSimzErAAAwc0KKE8k043.png
wKiom1iv9eSimzErAAAwc0KKE8k043.png
wKiom1iv9eSRo4W1AAAqV8mR9-U324.png
wKiom1iv9eSRo4W1AAAqV8mR9-U324.png

server告知客户端,当前服务器的字符集、认证使用的插件。并将随机生成的一个salt值发给client。

第9个包:

wKiom1iv9gKjSAqTAACpUVF7sjQ964.png
wKiom1iv9gKjSAqTAACpUVF7sjQ964.png

client端收到server端发来的salt值,然后使用salt值和本地的登录密码生成一个新的随机串,然后将新的串发往服务端(就是上图中的dd249f24....这串字符串)。服务端check字符串反解析。

第10个包,是server-->client 的ACK包。

第11个包开始及之后的一些packet就是client<---> server 之间的通讯了。

wKioL1iv9h_zniNEAABvoE6-J0E349.png
wKioL1iv9h_zniNEAABvoE6-J0E349.png
wKioL1iv9h_w7-MgAAAUlAJ2sAA563.png
wKioL1iv9h_w7-MgAAAUlAJ2sAA563.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/02/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档