0x01. 前言

有时候,有人会带着这样的疑问?

当netstat -ano发现3306监听在0.0.0.0上,是不是就可以判断mysql是对外开放的

答案当然是否定的。

0x02. mysql连接特性

此时我们可以做一个测试,mysql监听在0.0.0.0上

1

并且服务器的mysql用户设置如下:

3

我们要知道localhost、127.0.0.1、::1这三个host存在优先级,他们优先级以此从高到低。可以这样理解:

如果localhost和127.0.0.1分别设置密码是123和456,那么最后本地登录mysql的密码是123,而不是456

[root@helen ~]# telnet 123.55.91.39 3306
Trying 123.55.91.39...
Connected to 123.55.91.39.
Escape character is '^]'.
GHost '115.29.170.215' is not allowed to connect to this MySQL serverConnection closed by foreign host.

用navicat连接可以看到返回的错误码是1130.也表示不能连接

2


此时我们新增一个非root用户,并且将host改为%,此时可以看到返回的错误码是1045。

5

即:只要host存在%,连接mysql错误的情况都会返回1045错误码。

并且telnet返回的结果如下,还能看到mysql版本是5.5.16-log

[root@helen ~]# telnet 123.55.91.39 3306
Trying 123.55.91.39...
Connected to 123.55.91.39.
Escape character is '^]'.
N
5.5.16-logdt=n4V5D^-d1f0XMYX-mysql_native_passwordConnection closed by foreign host.
0x03. 利用navicat导出的脚本脱裤

navicat在连接数据库的时候可以使用http通道。用法如下:
先将下图导出的脚本文件放到服务器上,通过脚本文件的url来连接。比其他脱裤脚本方便很多。

5

但是win版本的navicat没有这个按钮,mac版的有。win版的在navicat的安装目录下。

9

连接的时候,在http选项中通道地址填写http://123.55.91.39:8089/ntunnel_mysql.php

7

主机名:localhost,这样就可以正常用navicat连接一样

6

最后脱裤的效果:
8

0x04. 总结
  1. mysql返回1130表示没有账号开启外联
  2. mysql返回1045表示有账号开启外联,但是不知道是哪个账号
  3. localhost、127.0.0.1、::1 这三个优先级以此从高到低