获得对数据库的访问权如何提供对底层 OS 的访问权?

How can gaining access to a database provide access to the underlying OS?

如标题所述,我不明白访问数据库的权限与对底层 OS 上的 write/read 文件的权限之间的关系。

在我最新的一个 CTF 中,我必须获得对数据库的访问权限,然后读取包含标志的服务器文件。我知道这只有在受感染的用户拥有文件权限时才有可能,但我的问题仍然存在。

Sqlmap 在其功能中声明它可以完成此任务:

Support to download and upload any file from the database server underlying file system when the database software is MySQL, PostgreSQL or Microsoft SQL Server.

现在我的具体问题:

在我看来,权限应该区别对待,数据库用户不应该拥有 OS 的权限,与 DBMS 相关的文件除外。

在此先感谢,我知道问题不限于一个方面,而是包含各种基本主题。我也愿意做更多的研究,但也许有一个答案可以促进我的学习过程。

我不确定其他人,但以下是 MySQL 和 MariaDB 的情况。

您需要一个额外的本地权限提升漏洞来获得对数据库用户无权访问的任何文件的访问权限。可供访问的文件路径在系统变量secure_file_priv中。 Dumping/loading 无法从任何其他位置获取数据。

此外,如果没有允许您执行任意命令的 UDF 插件,则无法执行命令。这样的东西存在,但不是 MySQL / MariaDB 的一部分 - 它是数据库服务器上的 sysadmin/DBA 必须自己安装的东西。否则,您将无法获取文件列表。

然后是OS级保护:

1) POSIX级权限 这是常规 user/group 文件系统权限。

2) 二次硬化,例如SELinux 或 AppArmor 这将防止 运行 进程访问与安全策略中定义的上下文或路径不匹配的路径、端口和其他资源。

简而言之,您不能 access/retrieve 任意文件通过数据库层,除非服务器被故意(错误)配置为允许您这样做的方式,并且需要积极努力配置一个MySQL 或 MariaDB 服务器,使其对此保持开放。