数据库提权

本文最后更新于 2024年6月26日 上午

数据库提权流程

先获取到数据库用户密码

利用数据库提权项目进行连接

  • MDUT

https://github.com/SafeGroceryStore/MDUT

  • Databasetools

https://github.com/Hel10-Web/Databasetools

  • RequestTemplate(新出的不是很好用)

https://github.com/1n7erface/RequestTemplate

可利用建立代理解决不支持外联

  • 利用已知Web权限建立代理(等同于本地连接)

  • 利用已知权限执行SQL开启外联(让数据库支持外联)

     GRANT ALL PRIVILEGES ON _._ TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    
     flush privileges;
    
     EXEC sp\_configure 'show advanced options', 1;
    
     RECONFIGURE;
    
     EXEC sp\_configure 'Ad Hoc Distributed Queries', 1;
    
     RECONFIGURE;
    
     ALTER SYSTEM SET REMOTE\_LOGIN\_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
    
     SHUTDOWN IMMEDIATE;
    
     STARTUP;
    

可利用数据库提权类型条件及技术

  • MYSQL:PHP+MYSQL 以web入口提权

条件:ROOT密码(高版本的-secure-file-priv没进行目录限制)

技术:UDF MOF 启动项 反弹Shell

  • MSSQL:.NET+MSSQL 以web入口提权

条件:sa密码

技术:xp_cmdshell sp_oacreate CLR 沙盒

  • Oracle:(站库分离,非JSP,直接数据库到系统等)

条件:数据库用户密码

技术:DBA,普通用户,注入模式

MySQL提权

UDF提权

原理

​ udf = ‘user defined function’,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象 使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在于‘mysql/lib/plugin’目录下,文件 后缀为‘.dll’,常用c语言编写。

利用条件

  • 获取mysql控制权限:知道mysql用户名和密码,并且可以远程登录(即获取了mysql数据库的权限)
  • mysql具有写入文件的权限:mysql有写入文件的权限,即secure_file_priv的值为空。

用法

1
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

只有两个变量,一个是function_name(函数名),我们想引入的函数是sys_eval。还有一个变量是shared_library_name(共享包名称),即‘udf.dll’。 至此我们已经引入了sys_eval函数,下面就是使用了。 这个函数用于执行系统命令,用法如下:

1
Copyselect sys_eval('cmd command');

MOF提权(MySQL5.几以上就失效了,不常用)

(1)利用条件

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

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

(2)原理

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

(3)Mof提权的弊端

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

cmd 下运行下面语句:

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

重启服务即可。

实战不建议用这个,因为重启服务可能会有问题,不重启可能会留下溯源痕迹

MSSQL提权

xp_cmdshell提权

原理

xp\_cmdshell可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回 任何输出,是一个功能非常强大的扩展“存贮过程”。那么“存储过程”,其实质就是一个“集合”,就是存储在Sql Server中预先定义好的“SQL语句集合”,说的更直白一些就是各种小脚本共同组成的集合体,我们称之为“存储 过程”。

利用条件

​ 1、任何版本的Sql Server都可以对xp_cmdshell 进行利用;

​ 2 、SQL Server数据库没有被降权;

​ 3、 sa用户或其他具有dba权限的账户。

sp_oacreate提权

原理

sp\_oacreate可以删除、复制、移动文件,还能配合sp\_oamethod来写文件执行cmd。

sp\_oacreatesp\_oamethod两个过程分别用来创建和执行脚本语言,换言之就是xp\_cmdshell能执行的 sp\_oacreate+sp\_oamethod同样能胜任。但是使用此方法时sp\_oacreate没有回显,所以一般用于xp\_cmdshell无法使用时。

注:由于没有回显,去服务器上查看成功,用起来没有xp_cmdshell方便

3、sandbox提权(沙箱提权)

原理

当执行命令方法无法使用时,可以使用沙盒进行提权。

沙盒模式SandBoxMode是一种安全功能。在沙盒模式下,Access只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。例如,诸如Kill和Shell之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。

OLE DB Driver for SQL Server是用于访问数据的底层COM API,是应用程序链接到SQL Server的的驱动程序。

本质是修改注册表,默认情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行命令。

Oracle提权

这个提权后续有需要再补充,一般是java的站才会用这个数据库,由于java的本身权限较高,这个提权就非常的鸡肋

原文转自:水刃安全