游客发表

mysql渗透

发帖时间:2026-10-17 04:38:46

MySQL 3306 端口对外开放,等于把数据库的钥匙插在门上还贴了张纸条告诉别人钥匙在哪。2016 年 MongoDB 大规模勒索事件还历历在目,但 MySQL 的暴露面其实更广——几乎每台 Web 服务器后面都蹲着一个 MySQL,弱口令、UDF 提权、日志写马这些手法至今仍然管用。

先说最直接的入口:爆破。很多人觉得现在谁还用弱口令,但实际情况是,内网系统、测试环境、外包项目里 root/root、root/123456 这类组合遍地都是。用 hydra 跑一轮字典,十分钟能出结果。更隐蔽的是读取 MySQL 配置文件——my.cnf 或者 Web 目录下的 config.php,里面明文写着数据库账号密码,拿到就是直连。我见过一个案例,目标站点的 phpinfo.php 没删,直接暴露了数据库主机、用户名和密码,连爆破都省了。

拿到低权限账号之后,第一步是看 SELECT user,file_priv FROM mysql.user;。如果 file_priv 是 Y,事情就简单了。MySQL 的 LOAD_FILE() 可以读服务器上的任意文件,INTO OUTFILE 可以写文件。写 WebShell 是最经典的用法:

SELECT '' INTO OUTFILE '/var/www/html/shell.php';

前提是 secure_file_priv 没限制、目录有写权限、知道网站绝对路径。三个条件缺一个就卡住。secure_file_priv 在 MySQL 5.7 之后默认是 NULL,直接堵死了这条路径。但 5.6 及以前的版本、或者手动改过配置的服务器,依然能打。

UDF 提权是另一个方向。MySQL 允许加载自定义函数库,攻击者编译一个包含 sys_eval() 的 so 文件,通过 CREATE FUNCTION ... SONAME 加载进去,就能以 mysql 用户的权限执行系统命令。如果 MySQL 以 root 运行(很多运维图省事就这么干),直接就是 root 命令执行。这个手法在 Linux 上依赖 plugin 目录可写,Windows 上则是 DLL 文件。2000 年代初期的 raptor 工具到现在还能用,说明这个攻击面一直没被堵上。

还有一个常被忽略的点:MySQL 的认证协议。老版本 MySQL 使用 mysql_native_password,抓包拿到 challenge-response 之后可以离线爆破。工具像 mysql_sniffer 配合 tcpdump 就能干这事。内网环境里,ARP 欺骗加上 MySQL 流量嗅探,能批量拿到数据库凭据。这种攻击不碰目标服务器本身,流量层面就完成了,防火墙和 IDS 很难察觉。

防御方面,说几个真正有效的。bind-address 设成 127.0.0.1 是最基本的,但很多人图方便设成 0.0.0.0。secure_file_priv 保持默认的 NULL,别动。MySQL 进程用独立低权限用户跑,别用 root。账户权限最小化,Web 应用连数据库的账号只给 SELECT/INSERT/UPDATE/DELETE,别给 FILE 和 SUPER。审计日志开起来,general_log 虽然性能有损耗,但出事了能追溯。最后,别在代码里硬编码数据库密码,用环境变量或者配置中心。

渗透测试的角度看,MySQL 从来不是孤立目标。它往往是横向移动的跳板——从 Web 漏洞拿到数据库权限,再从数据库读写文件拿到系统权限,最后用系统权限去连内网其他机器。这条链路成熟、稳定、工具齐全。防守方如果只盯着 Web 层,忽略数据库这层,等于把后门敞着还觉得自己挺安全。

    热门排行

    友情链接