Quantcast
Channel: 碳基体
Viewing all articles
Browse latest Browse all 75

三、TCP/IP协议分析-MySQL认证协议分析

$
0
0

登陆mysql数据库,抓取mysql从建立连接到断开连接的双向流量,如下图所示

python print_tcp_session.py



一次失败的MySQL登陆,账号为root
三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
 一次成功的mysql登陆,账号为ids

三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
由上图所示,
 MySQL采用的二进制协议,采用的小端字节序

MySQL报文结构由消息头消息体构成,而消息头又由消息体长度与序列号构成。
消息头为固定长度4个字节,消息头长度占3个字节,序列号占1个字节。


一次失败的认证过程为
服务端-> 客户端:Server Greeting,Packet Number 00
客户端-> 服务端: Login Request,Packet Number 01
服务端->客户端: Response Error,Packet Number02


一次成功的认证过程为
服务端-> 客户端:Server Greeting, Packet Number 00
客户端-> 服务端: Login Request,Packet Number 01
服务端->客户端: Response OK,Packet Number 02


客户端认证报文的消息体组成三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 (1) Server Greeting后,明文传输
客户端权能标志client capabilities 2个字节 

+ 客户端全能标志(扩展)extended client capabilities 2个字节
+ 最大消息长度max packet 4个字节
+ 字符编码charset  1个字节
+ 填充值 23个字节(全是00)
+ 用户名 username(不固定长度,以0x00结束)
+密码串长度(1个字节)
密码的加密串(不固定长度,由密码串长度决定) 
+ 数据库名称schema(不固定长度,以0x00结束) #由客户端权能标志CLIENT_CONNECT_WITH_DB决定是否返回
+其他可选
 (2) Server Greeting后,SSL传输
客户端权能标志2个字节 
+ 客户端全能标志(扩展)2个字节
+ 最大消息长度 4个字节
+ 字符编码 1个字节
+ 填充值 23个字节(全是00)
 
其中客户端与服务端握手后,后续是否切换到ssl传输,由客户端全能标志位决定
三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
服务端响应报文的消息体组成
(1)成功响应
三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
状态标识(1个字节) #00表示成功/FF表示失败
+ 受影响的行数 变长
+ 索引ID 变长
+ 服务器状态 2个字节
+ 告警计数 2个字节
+ 服务器消息 变长
(2)失败响应
三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体
 
状态标识  1个字节 #00表示成功/FF表示失败
+ 错误码  2个字节
+ # 1个字节 固定为 0x23
+ sql 状态 5个字节
+错误消息(不固定长度)

参考:

Viewing all articles
Browse latest Browse all 75

Trending Articles