01-数据库渗透流程与探测

目标:拿到目标 IP 后,快速定位数据库服务、识别版本、判断可利用面。本章是 02-MySQL渗透07-MongoDB渗透 各章的总入口。

目录


一、渗透标准流程

flowchart LR
    A[信息收集] --> B[端口探测]
    B --> C[版本指纹]
    C --> D[弱口令爆破]
    D --> E[漏洞利用]
    E --> F[提权/getshell]
    F --> G[哈希提取/横向]

各阶段要点:

阶段动作产出
信息收集域名、子域、旁站、云资产归属目标 IP 列表
端口探测nmap 全端口 + 服务识别开放端口与服务版本
版本指纹banner、nmap 脚本、报错信息精确版本号 → CVE 匹配
弱口令hydra/medusa 在线爆破(见 [[08-口令破解与哈希提取08章]])
漏洞利用未授权访问、已知 CVE、认证后 RCE数据或 shell
提权UDF/xp_cmdshell/COPY 等(各分章)系统权限
横向哈希复用、dblink/openrowset、内网弱口令扩大战果

二、主流数据库端口表

数据库默认端口协议认证默认状态
MySQL3306(X 协议 33060)TCP需认证,但常配弱口令
MSSQL1433(命名实例走 UDP 1434 动态端口)TCPsa 账户常被爆破
Oracle1521(XE 有时 1522)TNS/TCP多套默认账户
PostgreSQL5432TCPpostgres 超管账户
MongoDB27017(shard 用 27018+)TCP老版本默认无认证
Redis6379TCP默认无密码
Memcached11211(UDP 同端口)TCP/UDP无认证机制
Elasticsearch9200(HTTP)/9300(传输)TCP老版本无认证直出

三、nmap服务识别命令集

3.1 全端口扫描与服务识别

# 全端口 + 服务版本识别(外网首选,耗时较长)
sudo nmap -sV -p- -T4 --open -oN db_scan.txt <target>
 
# 只扫常见数据库端口,快速确认
sudo nmap -sV -p 1433,1521,3306,5432,6379,11211,27017,9200 -oN db_quick.txt <target>
 
# 操作系统指纹辅助判断
sudo nmap -sV -O -p 3306,6379,27017 <target>

3.2 各库专用 NSE 脚本

# MySQL:基本信息、用户枚举、空口令检测
nmap -p 3306 --script mysql-info <target>
nmap -p 3306 --script mysql-enum <target>
nmap -p 3306 --script mysql-empty-password <target>
nmap -p 3306 --script mysql-databases --script-args mysqluser=root,mysqlpass=123456 <target>
 
# MSSQL:ping 探测、空口令、枚举
nmap -p 1433 --script ms-sql-info <target>
nmap -p 1433 --script ms-sql-empty-password <target>
nmap -p 1433 --script ms-sql-query --script-args 'ms-sql-username=sa,ms-sql-password=123456,ms-sql-query="select @@version"' <target>
 
# Oracle:TNS 版本、SID 枚举
nmap -p 1521 --script oracle-tns-version <target>
nmap -p 1521 --script oracle-sid-brute <target>
 
# PostgreSQL:版本与认证方式
nmap -p 5432 --script pgsql-brute <target>
 
# Redis / MongoDB / Memcached:未授权访问检测
nmap -p 6379 --script redis-info <target>
nmap -p 27017 --script mongodb-info <target>
nmap -p 11211 --script memcached-info <target>
 
# Elasticsearch
nmap -p 9200 --script http-title,http-jsonp-discovery <target>

所有 login 类脚本命中凭据后,直接跳转 08-口令破解与哈希提取 的 hydra 命令集做批量验证。


四、版本指纹与CVE对应

拿到精确版本后查 CVE,典型高危对应:

数据库版本区间高危问题利用章节
Redis< 5.0.5主从复制 RCE 可用[[06-Redis渗透
Redis4.x/5.x 且 Lua 沙箱存在缺陷CVE-2022-0543 沙箱逃逸[[06-Redis渗透
MySQL5.x 全系UDF 提权路径成熟[[02-MySQL渗透
MSSQL2005-2019xp_cmdshell/CLR 利用链[[03-MSSQL渗透
PostgreSQL9.3-11(superuser 配置 COPY)COPY TO PROGRAM RCE[[05-PostgreSQL渗透
PostgreSQL9.3-11.1 特定配置CVE-2019-9193[[05-PostgreSQL渗透
MongoDB< 3.6 默认无认证未授权访问全库拖取[[07-MongoDB渗透

版本获取手段:

# MySQL:未登录时通过 banner 或报错
mysql -h <target> -u root -p   # 登录后 SELECT version();
nc -nv <target> 3306           # 直接读 banner(部分版本回显)
 
# Redis:INFO server 字段含 redis_version
redis-cli -h <target> INFO server | grep redis_version
 
# MSSQL:banner 中直接带版本
nmap -p 1433 -sV <target>
 
# Elasticsearch:HTTP 根路径直接返回 version.number
curl -s http://<target>:9200/

五、常见暴露原因

红队遇到的数据库暴露公网,绝大多数来自以下三类运维失误:

原因典型形态检测方法
云安全组全放行入方向规则 0.0.0.0/0 放行 3306/6379外网 nmap 直扫即见
docker -p 端口映射docker run -p 6379:6379 把容器服务透出宿主机banner 常带容器特征,Redis info 中 os 字段为 Linux alpine
bind-address 监听错误MySQL bind-address = 0.0.0.0、MongoDB bindIp: 0.0.0.0、PostgreSQL listen_addresses = '*'能从外部建立 TCP 连接即为监听全网卡
内网穿透工具frp/nps 把内网库映射到公网 VPS延迟异常、IP 归属与业务不符
# 验证是否真的对外可达(本机发起连接测试)
nc -zv <target> 6379
curl -v telnet://<target>:3306

六、shodan与fofa搜索语法

测绘平台用于资产发现与同类暴露面批量排查:

平台语法说明
shodanproduct:MySQL port:3306 country:CN按 product 过滤
shodanproduct:Redis version:3.2.0锁定易受攻击版本
shodan"mongoDB" port:27017MongoDB 暴露
shodanproduct:"Elasticsearch" port:9200ES 直出
fofaport="3306" && protocol="mysql"fofa 端口+协议组合
fofaprotocol="redis" && country="CN"Redis 批量
fofaapp="ElasticSearch" && port="9200"ES 组件名匹配
hunterweb.protocol="redis"同类思路
censysservices.port:6379 and services.service_name:REDIS英文生态补充

测绘结果仅作授权范围内资产梳理参考;对非授权目标发起任何连接测试均属违法。实战中优先用测绘确认自己客户的暴露面,再回到 nmap 做精确验证。


七、内网场景的数据库发现

进入内网后(已有一台立足点),数据库发现的重点从外网端口转向网段扫描与配置文件翻找:

# 内网快速扫库(从立足点发起,ICMP 存活 + 端口)
nmap -sn 10.0.0.0/24 -oG live.txt
nmap -sV -p 1433,1521,3306,5432,6379,27017 -iL live.txt
 
# 无 nmap 环境用原生工具探测
for p in 3306 6379 27017; do (echo > /dev/tcp/10.0.0.5/$p) 2>/dev/null && echo "$p open"; done
发现渠道命令/位置说明
Web 配置文件config.phpapplication.ymlweb.config直接给出内网库地址与凭据
连接串搜索`grep -rE ‘jdbcconnectionstring
域内 SPNsetspn -Q */MSSQL*GetUserSPNs.py定位域内 MSSQL 服务账户
ARP/路由信息ip routearp -a判断可达网段

内网 MSSQL 的发现往往伴随 Kerberos 攻击面(服务账户口令请求破解),属于域渗透交叉内容,此处仅作定位提示。


返回 数据库安全 总目录