• mysql协议简析


    前言

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

    mysql -u root -p
    

    这样指定用户名和密码

    当然还可以使用远程连接

    mysql -h 127.0.0.1 -u root -p
    

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

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

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

    前期设置

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

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

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

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

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

    tcpdump -i lo port 3306 -w mysql.pcap
    

    使用

    mysql -h 127.0.0.1 -u admin -p
    

    来连接数据库

    执行下列命令

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

    mysql协议分析

    0x1 建立连接

    首先三次握手建立连接

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

    抓包的数据为

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

    抓包数据如下

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

    加密的方法如下

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

    0x2 执行命令

    执行命令的报文如下

    抓包数据中可以看到

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

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

    参考链接

    https://segmentfault.com/a/1190000012166738

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

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

  • 相关阅读:
    淘宝IP地址库采集
    Android MediaCodec硬编兼容性测试方案
    《Tensorflow实战》之6.3VGGnet学习
    tensorflow问题集锦
    <tensorflow实战>之5.3实现进阶的卷积网咯
    CNN_minist
    tensorflow之MLP学习
    tensorflow学习之等价代码
    tensorflow学习之softmax regression
    NPE进一步学习
  • 原文地址:https://www.cnblogs.com/hf99/p/9917414.html
Copyright © 2020-2023  润新知