学习如何浏览数据库非常重要,因为大多数关键数据(包括用户名和密码)都存储在其中,这些数据可能用于获得对目标系统的最高特权访问权限。在之前的文章中,我们已经谈到了数据库的主题。但是,在这篇文章中,我们将学习如何浏览它们。
Web服务器和其他服务使用MySQL,MariaDB或其他技术等数据库的原因是为了将累积的数据存储在易于访问且组织良好的地方。该数据可以代表用户名,密码,帖子,消息,用户加入的确切日期以及其他信息 - 具体取决于网站的目的。每个数据库都包含表,而表又包含行和列。例如,如果有一个网站有一个小型的社交网络和电子商务部分,则需要几个单独的部分,这些部分不应该相互访问:
一个包含用户的私人信息,例如电子邮件地址、地理位置、登录历史记录和附加的 IP 地址、真实姓名、信用卡信息等。
一个包含可公开搜索的信息,例如产品、服务、音乐、视频和其他类型。
SQL 服务通常运行的一个很好的例子是用于任何用户的登录过程。每次用户想要登录时,Web 应用程序都会将登录页输入(用户名/密码组合)发送到 SQL 服务,并将其与该特定用户的存储数据库条目进行比较。假设指定的用户名和密码与数据库中的任何条目匹配。在这种情况下,SQL 服务会将其报告回 Web 应用程序,而 Web 应用程序又会让用户登录,从而允许他们访问网站的受限部分。登录后,Web 应用程序将以 cookie 或身份验证令牌的形式为用户设置特殊权限,该权限将他的在线状态与他在网站上的身份验证状态相关联。这个Cookie 将存储在本地、用户的浏览器存储和网络服务器上。
之后,如果用户想要在页面上列出的列表项中搜索特定内容,他将在搜索栏中输入对象的名称,这将触发相同的 SQL 服务代表用户运行 SQL 查询。假设数据库中存在搜索项的条目,通常位于不同的表下。在这种情况下,将检索相关信息并将其发送到 Web 应用程序,以显示为图像、文本、链接和其他类型,例如注释和评论。
但是,在我们的例子中,我们不需要通过 Web 应用程序访问 SQL 服务。扫描目标后,我们将找到一种直接与SQL服务“对话”的方法。
-sC:使用默认脚本集执行脚本扫描。相当于——脚本 = 默认。此类别中的某些脚本被视为侵入性脚本,未经许可,不应针对目标网络运行。
-sV:启用版本检测,这将检测哪些端口正在运行哪些版本。
从 nmap 扫描开始,因此我们可以检查哪些端口已打开以及哪些服务正在运行:
nmap -sC -sV 10.129.195.128

我们只找到了一个开放端口 - 3306,它运行一个名为MySQL 5.5.5-10.3.27-MariaDB-0+deb10u1。MySQL 是为数据库管理而设计的服务:创建、修改和更新数据库,更改和添加数据等。
为了与数据库通信,我们需要在本地安装mysql和mariadb机器。为此,我们需要运行以下命令。确保在*命令的末尾以包含所有相关可用的 MySQL 包。这将满足我们目前的所有需求。
apt update && apt install mysql*

安装完成后,可以运行以下命令以查看如何使用服务命令。
mysql --help

请注意,MySQL 客户端通常使用用户名/密码组合向服务进行身份验证。但是,必须测试无密码身份验证,因为服务中可能存在故意的错误配置,这将允许人员在项目的部署阶段轻松登录到服务,以便在将其提供给其他同事之前轻松与之交互。在当前情况下,最初的尝试可能是尝试以系统上的最高权限级别登录root用户。
-h:连接主机
-u:使用正确的账户登录
mysql -h 10.129.195.128 -u root

自然拥有运气好的话,我们的连接无需密码即可被接受。我们被放置在MySQL服务shell中,从中我们可以探索其中可用的表和数据。如果我们需要有关MySQL命令语法的帮助,可以参考MySQLTutorial提供的备忘单。
我们将要使用的命令对于导航至关重要:
show databases; :显示数据库。
use {database_name}; :设置为使用名为{database_name}的数据库。
show tables; :打印出当前内部的可用表格。
select * from {table_name}; :打印出表 {table_name} 中的所有数据。
请注意,必须以;符号结束每个命令,因为它声明了命令的结束。
除此之外,SQL是一种面向查询的语言,这意味着一次只提供一个查询。
show databases;

从输出中,需要“select”的htb数据库似乎对我们很有价值。为了查看其中的内容,我们将使用htb数据库作为活动数据库 - 我们想要积极与之交互的数据库。为此,可以使用 use htb;做为后续命令。
use htb;

我们已经成功地使用了数据库。下一步是检查htb数据库使用哪些表。我们可以通过使用show tables;跟进命令来实现这一点。
show tables;

我们有两个表:config和users。可以使用select * from {table_name}命令,其中 {table_name}是所需表的确切名称,从上面的输出中提取。一旦我们查询config表的内容,flag条目为我们终端的输出及其价值。
select * from config;

7b4bec00d1a39e3dd4e021ec3d915da8