简介
在使用其他方式皆无法提权成功时,可以尝试利用mysql数据库提权,数据库提权就是利用执行数据库语句和数据库函数等方式提升服务器用户权限。
原理:
udf(user defined funtion),用户自定义函数。顾名思义,通过让用户自定义函数,来对mysql的功能进行扩充。udf提权将构造好的udf文件上传到指定目录(mysql<5.1,放置于c:\windows\system32\目录。mysql>5.1,放置于mysql安装目录下的lib\plugin目录下,此文件夹默认不存在,需要自己创建),然后创建自定义函数,执行命令。
利用条件:
1)有写入到目录的权限
2)具有数据库root权限
步骤演示:
1. 已经通过上传文件拿到网站shell,但由于用户权限太低,很多操作受限,需要创建一个高权限用户。首先连接webshell,使用数据库命令,查询数据库版本为5.5.47。
2. 判断数据库安装目录路径。
3. 在mysql安装目录下的lib文件夹中创建plugin文件,并将udf文件(此处使用sqlmap自带的udf文件,需解码)上传至该目录。
4. 引入udf文件创建自定义函数
命令:CREATE FUNCTION [function_name] RETURNS {STRING|INTERGER|REAL
} SONAME ‘shared_library_name’;
shared_library_name:表示函数从哪个文件引入,windows为dll,linux为so
5. 执行sys_eval函数命令创建用户并加入到管理员组。
6. 查看是否添加成功。
7. 最后删除自定义函数。
二、mof提权
原理:
nullevt.mof文件是windows系统下的一个文件,默认存放路径为c:/windows/system32/wbem/mof/,其作用是每隔5秒钟监控进程的创建和死亡。通过将构造好的mof文件写入此文件夹,每隔一段时间此文件就会自动执行,从而完成提权。
利用条件:
1)windows 2003及以下版本
2)secure_file_priv不为null
3)具有mysql root权限
步骤演示:
1.使用菜刀连接webshell,现在是普通用户权限,无法直接对c:/windows/system32/wbem/mof/文件写入文件。
2.选择一个具有写有写入权限的文件夹,上传构造好的mof文件。
3.mof文件内容如下,此脚本可以创建一个名为admin123的新用户:
4. 使用数据库命令将上传的mof文件导出到c:/windows/system32/wbem/mof/目录
命令:select load_file('C:/Documents and Setting/test/nullevt.mof'
) into dumpfile 'C:/WINDOWS/system32/wbem/mof/nullevt.mof';
load_file:读取文件内容并将文件内容作为字符串返回
5. 等待一段时间,用户成功创建
同理可以构造将用户加入到管理员组的mof文件,从而达到提权的目的。
三、启动项提权
原理:
将一段vbs脚本导入到C:\Documents and Settings\All Users\「开始」菜单\程序\启动 目录下,当服务器重新启动后,会自动运行此段脚本执行命令
利用条件:
1)具有数据库root权限
2) secure_file_priv=””
步骤演示:
1. mysql在安装时默认情况会安装mysql、test两个数据库,进入test数据库查看表,默认情况下test数据库没有任何表存在。首先在test数据库下创建一张表test1,并定义字段名为cmd,text类型。
2. 查看表和字段是否创建成功
3. 向test1表中插入以下内容
4. 导出表中的内容到C:\Documents and Settings\All Users\「开始」菜单\程序\启动 目录下作为一个vbs脚本。
由于存在中文,尝试多次无法导出成功,所以将中文路径进行url编码导出:
5. 重启服务器,查看命令是否执行成功。
四、反弹端口连接提权
原理:
反弹端口连接提权也算是udf提权,使用特制的udf文件构造反向端口连接函数,主动连接攻击机。适用于一些特殊场景,例如通过网站无法获取webshell,有了Webshell无法执行命令,有phpmyadmin和root账号,无法查询或者无法获取网站的真实路径。
利用条件:
1)有写入到目录的权限
2) 具有数据库root权限
步骤演示:
1. 查看数据库版本和mysql目录
2. 创建lib\plugin目录并上传udf.dll文件
3. 攻击机启动nc监听4444端口,等待反向端口连接
4. 调用udf文件创建backshell函数
5. 执行函数启动反向连接
总结
本篇文章分析并演示了常见的mysql提权方式,熟练的掌握这几种方式,可能在某些场景会带来意外之喜。
参考链接:
1. https://blog.csdn.net/guo15890025019/article/details/119269796?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.control&spm=1001.2101.3001.4242
2. https://www.cnblogs.com/xishaonian/p/6384535.html
3. https://netsecurity.51cto.com/art/201702/532984.htm