前言

如果要在命令行中连接mysql,最常用的便是

  1. mysql -u root -p

这样指定用户名和密码

当然还可以使用远程连接

  1. mysql -h 127.0.0.1 -u root -p

还有一种较为少见的,使用ssl来连接

  1. mysql -h 127.0.0.1 -u root --ssl=on -p

既然可以远程连接,那么数据必定要从网上流通.那就必然要面临安全问题,mysql是怎么解决的呢?

前期设置

既然要研究mysql远程连接时的通信过程,那么首先要开启mysql的远程连接功能

如果在配置文件中设置了bind-address,需要将其改为0.0.0.0

创建一个用户名为admin,密码为123456的用户,允许外部访问

  1. grant all on *.* to admin@'%' identified by '123456' with grant option;
  2. flush privileges;

使用tcpdump监听3306端口,并将监听结果导出至mysql.pcap文件中

  1. tcpdump -i lo port 3306 -w mysql.pcap

使用

  1. mysql -h 127.0.0.1 -u admin -p

来连接数据库

执行下列命令

  1. use flag;
  2. select * from flag1 where id = 1;
  3. exit

mysql协议分析

0x1 建立连接

首先三次握手建立连接

建立连接后服务端会向客户端发送一个包,包的格式如下

抓包的数据为

接受到这样的包后由客户端加密过后向服务端发包,包的格式如下

抓包数据如下

只要password符合服务端的数据,即可建立连接

加密的方法如下

  1. hash1 = SHA1(password) //password是用户输入的密码
  2. result = hash1 ^ sha1(scramble+sha1(hash1))

0x2 执行命令

执行命令的报文如下

抓包数据中可以看到

其中02就对应着切换数据库的操作

  1. 0x00 COM_SLEEP 内部线程状态
  2. 0x01 COM_QUIT 关闭连接
  3. 0x02 COM_INIT_DB 切换数据库
  4. 0x03 COM_QUERY SQL查询请求
  5. 0x04 COM_FIELD_LIST 获取数据表字段信息
  6. 0x05 COM_CREATE_DB 创建数据库
  7. 0x06 COM_DROP_DB 删除数据库
  8. 0x07 COM_REFRESH 清除缓存
  9. 0x08 COM_SHUTDOWN 停止服务器
  10. 0x09 COM_STATISTICS 获取服务器统计信息
  11. 0x0A COM_PROCESS_INFO 获取当前连接的列表
  12. 0x0B COM_CONNECT (内部线程状态)
  13. 0x0C COM_PROCESS_KILL 中断某个连接
  14. 0x0D COM_DEBUG 保存服务器调试信息
  15. 0x0E COM_PING 测试连通性
  16. 0x0F COM_TIME (内部线程状态)
  17. 0x10 COM_DELAYED_INSERT (内部线程状态)
  18. 0x11 COM_CHANGE_USER 重新登陆(不断连接)
  19. 0x12 COM_BINLOG_DUMP 获取二进制日志信息
  20. 0x13 COM_TABLE_DUMP 获取数据表结构信息
  21. 0x14 COM_CONNECT_OUT (内部线程状态)
  22. 0x15 COM_REGISTER_SLAVE 从服务器向主服务器进行注册
  23. 0x16 COM_STMT_PREPARE 预处理SQL语句
  24. 0x17 COM_STMT_EXECUTE 执行预处理语句
  25. 0x18 COM_STMT_SEND_LONG_DATA 发送BLOB类型的数据
  26. 0x19 COM_STMT_CLOSE 销毁预处理语句
  27. 0x1A COM_STMT_RESET 清除预处理语句参数缓存
  28. 0x1B COM_SET_OPTION 设置语句选项
  29. 0x1C COM_STMT_FETCH 获取预处理语句的执行结果

参考链接

https://segmentfault.com/a/1190000012166738

https://www.freebuf.com/articles/web/159342.html

---恢复内容结束---

mysql协议简析的更多相关文章

  1. DNS使用的是TCP协议还是UDP协议简析

    DNS使用的是TCP协议还是UDP协议简析   DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况 ...

  2. Https协议简析及中间人攻击原理

    1.基础知识 1.1 对称加密算法 对称加密算法的特点是加密密钥和解密密钥是同一把密钥K,且加解密速度快,典型的对称加密算法有DES.AES等                              ...

  3. HTTP协议--简析

    HTTP--超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,是所有的www文件都必须遵守的标准. 要想成为优秀的web开发人员,必须熟悉H ...

  4. TCP 协议简析

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接.它是个超级麻烦的协议, ...

  5. STUN协议简析

    http://blog.csdn.net/mazidao2008/article/details/4934257 ——————————————————————————————————————————— ...

  6. HTTP协议简析(二)

    HTTP响应也包含四部分内容: 响应行: 协议版本:HTTP/1.1 状态码:200 状态描述:对状态码的说明 响应头:用来规范数据,常用的有: server:服务器信息 date:响应的时间 las ...

  7. http协议简析(一)

    HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...

  8. QUIC/HTTP3 协议简析

    从 HTTP 的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码 QUIC 在 HTTP3 中的支撑作用,共同探讨 HTTP3 的未来. HTTP.HTTP2 和 HTTP3 先和大家来回顾一 ...

  9. DHCP协议简析

    推荐这篇文章,原理及抓包都分析的很好: **推荐这篇文章,原理及抓包都分析的很好:** https://blog.csdn.net/andy_93/article/details/78238931 简 ...

随机推荐

  1. bootstrap 栅格calss

    container container-fluid row col-xs- col-sm- col-md- col-lg- col-md-offset- col-md-push- col-md-pul ...

  2. Excel 报表导入导出

    使用 Excel 进行报表的导入导出,首先下载相关的 jar 和 excel util. Excel Util 下载地址 引入依赖: <!-- poi office --> <dep ...

  3. 解决Ubuntu终端里面显示路径名称太长

    方法/步骤 找到配置文件先进行备份:  cp  ~/.bashrc  ~/.bashrc-bak 找到配置文件修改: vi  ~/.bashrc 备份是为了防止配置修改出错,可以还原: 下面是我的/h ...

  4. cin.getline()与getline()

    C++中有两个getline函数, cin.getline()与getline()  这两个函数相似,但是 这两个函数分别定义在不同的头文件中.   cin.getline()属于istream流,而 ...

  5. .NET面试题系列(二)GC

    序言 对象生存期 Phone item=new Phone() 在C#中,创建对象使用的是new关键字. 要注意的是new操作返回的并不是对象本身,而是对象的一个引用(Reference). 如果使用 ...

  6. SDUT 3918

    Description 这一天希酱又补了一卦,没想到每个人都发到了一张印有整数的牌,现在希酱想要继续占卜的话需要知道每个人手里拿的牌的整数具体是多少,但是她们却打起了哑谜.  穗乃果:我拿到的是 2 ...

  7. NYOJ 141 Squares (数学)

    题目链接 描述 A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degre ...

  8. Function.prototype.bind 简介

    bind可以解决两种问题: 1. 可以改变一个函数的 this 指向 2. 可以实现偏函数等高阶功能 本文暂且讨论第一个功能 USE CASE var foo = { x: 3 } var bar = ...

  9. 深入理解Spring系列之八:常用的扩展接口

    转载 https://mp.weixin.qq.com/s/XfhZltSlTall8wKwV_7fKg Spring不仅提供了一个进行快速开发的基础框架,而且还提供了很多可扩展的接口,用于满足一些额 ...

  10. pycharm设置字体大小

    pycharm 是很好的一个IDE,在windows下,和macOS下,都能很好的运行.唯一缺点是启动慢. 默认字体太小,在mac下,需要瞪大24K氪金狗眼才能看清. 为了保护好眼睛,我们需要把字体调 ...