mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-rela
This commit is contained in:
+47
-42
@@ -1,74 +1,74 @@
|
||||
# AWS - Relational Database (RDS) Enum
|
||||
# AWS - 关系型数据库 (RDS) 枚举
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本信息
|
||||
|
||||
AWS 提供的 **关系数据库服务 (RDS)** 旨在简化 **云中关系数据库** 的部署、操作和扩展。该服务提供了成本效益和可扩展性的优势,同时自动化了诸如硬件配置、数据库配置、补丁和备份等劳动密集型任务。
|
||||
AWS 提供的 **Relational Database Service (RDS)** 旨在简化在云中部署、运行和扩展 **关系型数据库** 的流程。该服务在提高成本效率和可扩展性的同时,自动化了诸如硬件配置、数据库配置、补丁和备份等耗时的任务。
|
||||
|
||||
AWS RDS 支持多种广泛使用的关系数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle 数据库、Microsoft SQL Server 和 Amazon Aurora,兼容 MySQL 和 PostgreSQL。
|
||||
AWS RDS 支持多种常用的关系型数据库引擎,包括 MySQL、PostgreSQL、MariaDB、Oracle Database、Microsoft SQL Server 和 Amazon Aurora,并对 MySQL 和 PostgreSQL 提供兼容性。
|
||||
|
||||
RDS 的主要特点包括:
|
||||
RDS 的主要特性包括:
|
||||
|
||||
- **数据库实例的管理** 简化。
|
||||
- 创建 **只读副本** 以增强读取性能。
|
||||
- 配置 **多可用区 (AZ) 部署** 以确保高可用性和故障转移机制。
|
||||
- **数据库实例的管理** 得到简化。
|
||||
- 创建 **只读副本 (read replicas)** 以提升读取性能。
|
||||
- 配置 **多可用区 (multi-Availability Zone, AZ) 部署** 以保证高可用性和故障切换机制。
|
||||
- 与其他 AWS 服务的 **集成**,例如:
|
||||
- AWS 身份和访问管理 (**IAM**) 以实现强大的访问控制。
|
||||
- AWS **CloudWatch** 以进行全面监控和指标。
|
||||
- AWS 密钥管理服务 (**KMS**) 以确保静态加密。
|
||||
- AWS Identity and Access Management (**IAM**) 用于强大的访问控制。
|
||||
- AWS **CloudWatch** 用于全面的监控和指标。
|
||||
- AWS Key Management Service (**KMS**) 用于确保存储加密。
|
||||
|
||||
## 凭证
|
||||
## 凭据
|
||||
|
||||
创建 DB 集群时,可以配置主 **用户名**(默认是 **`admin`**)。要生成该用户的密码,可以:
|
||||
在创建 DB cluster 时,可以配置主用户的 **username**(默认为 **`admin`**)。要为该用户生成密码,你可以:
|
||||
|
||||
- **自己指定** 一个 **密码**
|
||||
- 告诉 RDS **自动生成** 它
|
||||
- 告诉 RDS 在 **AWS Secret Manager** 中管理它,并使用 KMS 密钥加密
|
||||
- **自行指定** 一个 **密码**
|
||||
- 告诉 RDS **自动生成** 密码
|
||||
- 告诉 RDS 在 **AWS Secret Manager** 中使用 KMS key 对其进行管理和加密
|
||||
|
||||
<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 认证
|
||||
|
||||
有 3 种类型的认证选项,但始终允许使用 **主密码**:
|
||||
有 3 种认证选项,但总是允许使用 **主密码 (master password)**:
|
||||
|
||||
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 公共访问与 VPC
|
||||
### 公共访问 & VPC
|
||||
|
||||
默认情况下,**不授予公共访问** 数据库,但可以 **授予**。因此,默认情况下,只有来自同一 VPC 的机器才能访问它,如果所选的 **安全组**(存储在 EC2 SG 中)允许的话。
|
||||
默认情况下 **不授予数据库公共访问权限**,但也 **可以被授予**。因此,默认情况下只有来自相同 VPC 的机器能访问它,前提是所选的 **security group**(存储在 EC2 SG 中)允许访问。
|
||||
|
||||
与其暴露 DB 实例,不如创建一个 **RDS Proxy**,它 **提高** 了 DB 集群的 **可扩展性** 和 **可用性**。
|
||||
与其直接暴露 DB 实例,也可以创建一个 **RDS Proxy**,它能 **提升** DB cluster 的 **可扩展性** 与 **可用性**。
|
||||
|
||||
此外,**数据库端口也可以修改**。
|
||||
此外,**数据库端口也可以被修改**。
|
||||
|
||||
### 加密
|
||||
|
||||
**默认启用加密**,使用 AWS 管理的密钥(可以选择 CMK)。
|
||||
**默认启用加密**,使用 AWS 托管的密钥(也可以选择使用 CMK)。
|
||||
|
||||
通过启用加密,您启用了 **存储、快照、只读副本和备份的静态加密**。管理此加密的密钥可以通过 **KMS** 发放。\
|
||||
在数据库创建后,无法添加此级别的加密。**必须在创建时进行**。
|
||||
启用加密后,你将为存储、快照、只读副本和备份启用 **静态加密 (encryption at rest)**。管理这些加密的密钥可以通过 **KMS** 颁发。\
|
||||
在数据库创建后无法添加此级别的加密。**必须在创建时启用**。
|
||||
|
||||
然而,有一个 **变通方法允许您加密未加密的数据库,如下所示**。您可以创建未加密数据库的快照,创建该快照的加密副本,使用该加密快照创建新数据库,最后,您的数据库将被加密。
|
||||
不过,有一个 **变通方法可以将未加密的数据库加密**:你可以对未加密的数据库创建快照(snapshot),然后创建该快照的加密副本,使用该加密快照创建一个新的数据库,这样新数据库就会是加密的。
|
||||
|
||||
#### 透明数据加密 (TDE)
|
||||
|
||||
除了 RDS 在应用层固有的加密能力外,RDS 还支持 **额外的平台级加密机制** 以保护静态数据。这包括 Oracle 和 SQL Server 的 **透明数据加密 (TDE)**。然而,重要的是要注意,虽然 TDE 通过加密静态数据来增强安全性,但它也可能 **影响数据库性能**。这种性能影响在与 MySQL 加密函数或 Microsoft Transact-SQL 加密函数结合使用时尤为明显。
|
||||
除了 RDS 在应用层提供的加密能力外,RDS 还支持 **平台级别的额外加密机制** 来保护静态数据。这包括针对 Oracle 和 SQL Server 的 **Transparent Data Encryption (TDE)**。需要注意的是,虽然 TDE 通过对静态数据加密来增强安全性,但它也可能 **影响数据库性能**。当与 MySQL 的加密函数或 Microsoft Transact-SQL 的加密函数结合使用时,这种性能影响尤其明显。
|
||||
|
||||
要使用 TDE,需要一些初步步骤:
|
||||
要使用 TDE,需要满足以下前提步骤:
|
||||
|
||||
1. **选项组关联**:
|
||||
- 数据库必须与选项组关联。选项组作为设置和功能的容器,促进数据库管理,包括安全增强。
|
||||
- 但是,重要的是要注意,选项组仅适用于特定的数据库引擎和版本。
|
||||
2. **在选项组中包含 TDE**:
|
||||
- 一旦与选项组关联,Oracle 透明数据加密选项需要包含在该组中。
|
||||
- 需要认识到,一旦将 TDE 选项添加到选项组,它就成为永久性固定项,无法移除。
|
||||
1. **Option Group 关联**:
|
||||
- 数据库必须与一个 option group 关联。option group 用作设置和功能的容器,便于管理数据库,包括安全性增强。
|
||||
- 注意,option group 仅适用于特定的数据库引擎和版本。
|
||||
2. **在 Option Group 中包含 TDE**:
|
||||
- 关联到 option group 后,需要在该组中包含 Oracle 的 Transparent Data Encryption 选项。
|
||||
- 需注意,一旦在 option group 中添加了 TDE 选项,该选项将成为永久配置,无法移除。
|
||||
3. **TDE 加密模式**:
|
||||
- TDE 提供两种不同的加密模式:
|
||||
- **TDE 表空间加密**:此模式加密整个表,提供更广泛的数据保护范围。
|
||||
- **TDE 列加密**:此模式专注于加密数据库中的特定单个元素,允许对加密数据进行更细粒度的控制。
|
||||
- TDE 提供两种不同的加密模式:
|
||||
- **TDE Tablespace Encryption**:对整个表空间进行加密,提供更广范围的数据保护。
|
||||
- **TDE Column Encryption**:对数据库中的特定列进行加密,允许更细粒度的加密控制。
|
||||
|
||||
理解这些前提条件和 TDE 的操作复杂性对于有效实施和管理 RDS 中的加密至关重要,以确保数据安全和遵守必要的标准。
|
||||
理解这些先决条件和 TDE 的操作细节对于在 RDS 中有效实施和管理加密非常重要,从而确保数据安全并符合必要的合规标准。
|
||||
|
||||
### 枚举
|
||||
```bash
|
||||
@@ -80,6 +80,10 @@ aws rds describe-db-cluster-backtracks --db-cluster-identifier <cluster-name>
|
||||
|
||||
## Cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore cluster snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-cluster-identifier <ID> --snapshot-identifier <ID>
|
||||
|
||||
# Get DB instances info
|
||||
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
|
||||
@@ -91,6 +95,7 @@ aws rds describe-db-instance-automated-backups
|
||||
## Find snapshots
|
||||
aws rds describe-db-snapshots
|
||||
aws rds describe-db-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier <ID> --db-snapshot-identifier <ID> --availability-zone us-west-2a
|
||||
|
||||
@@ -105,33 +110,33 @@ aws rds describe-db-proxy-targets
|
||||
## reset credentials of MasterUsername
|
||||
aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password <NewPassword> --apply-immediately
|
||||
```
|
||||
### 未经身份验证的访问
|
||||
### Unauthenticated Access
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 权限提升
|
||||
### Privesc
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-rds-privesc/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 利用后
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../aws-post-exploitation/aws-rds-post-exploitation/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 持久性
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../aws-persistence/aws-rds-persistence/README.md
|
||||
{{#endref}}
|
||||
|
||||
### SQL 注入
|
||||
### SQL Injection
|
||||
|
||||
有方法可以使用 **SQL 语法** 访问 DynamoDB 数据,因此,典型的 **SQL 注入也是可能的**。
|
||||
可以使用 **SQL syntax** 访问 DynamoDB 的数据,因此典型的 **SQL injections** 也是可能的。
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
|
||||
|
||||
+17
-4
@@ -4,7 +4,7 @@
|
||||
|
||||
## RDS
|
||||
|
||||
更多信息请参见:
|
||||
更多信息请查看:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-relational-database-rds-enum.md
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
## 公共端口
|
||||
|
||||
可以将 **数据库从互联网公开访问**。攻击者仍然需要 **知道用户名和密码、** IAM 访问权限,或者一个 **exploit** 才能进入数据库。
|
||||
可以将**数据库从互联网公开访问**。攻击者仍然需要**知道用户名和密码,**IAM 访问,或一个 **exploit** 来进入数据库。
|
||||
|
||||
## 公开 RDS 快照
|
||||
## 公开的 RDS 快照
|
||||
|
||||
AWS 允许将 **将下载 RDS 快照的访问权限授予任何人**。你可以非常容易地从你自己的账户列出这些公开的 RDS 快照:
|
||||
AWS 允许授予**任何人下载 RDS snapshots 的访问权限**。你可以非常容易地从你自己的账户列出这些公开的 RDS snapshots:
|
||||
```bash
|
||||
# Public RDS snapshots
|
||||
aws rds describe-db-snapshots --include-public
|
||||
@@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2]
|
||||
## Even if in the console appear as there are public snapshot it might be public
|
||||
## snapshots from other accounts used by the current account
|
||||
```
|
||||
## 公开的 RDS Cluster Snapshots
|
||||
|
||||
类似地,你可以查找集群快照
|
||||
```bash
|
||||
# Public RDS cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public
|
||||
|
||||
## Search by account ID
|
||||
aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]'
|
||||
|
||||
# From the own account you can check if there is any public cluster snapshot with:
|
||||
aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2]
|
||||
```
|
||||
### 公共 URL 模板
|
||||
```
|
||||
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
|
||||
|
||||
Reference in New Issue
Block a user