Realworld下的堡垒机SQL RCE漏洞
字数 1286 2025-08-29 08:30:24

PostgreSQL 堡垒机 SQL 注入与 RCE 漏洞利用指南

1. 堡垒机安全概述

堡垒机(Bastion Host),也称为跳板机或运维安全审计系统,是用于管理和控制内部网络资源访问的安全设备。作为运维人员访问内部服务器和网络设备的唯一入口,它通过集中化的身份认证、权限管理和操作审计来确保运维操作的安全性和可追溯性。

2. 漏洞发现与初步探测

2.1 初始信息收集

  • 目标系统通常通过SSH(22端口)或RDP(3389端口)提供服务
  • 许多厂商自行实现SSH/RDP服务,可能存在漏洞
  • 通过SSH banner信息可判断是否为自定义实现

2.2 数据库类型判断

判断目标数据库是否为PostgreSQL的方法:

  1. 端口判断:PostgreSQL默认使用5432端口
  2. 函数差异
    • 字符串长度函数:len vs length
    • 版本查询:version vs @@version
    • 子字符串函数:substring vs substr
  3. 特殊符号处理:观察数据库对特定符号的处理方式
  4. 系统表判断
    • MySQL(version>5.0):information_schema
    • Oracle:all_tables
    • SQL Server:sysobjects
  5. 盲注函数:PostgreSQL特有的函数行为

3. PostgreSQL 盲注技术

3.1 时间盲注检测

如果服务器响应时间随有效负载明显增加(约20秒),则可能存在漏洞。

  • 参数为整数时:

    pg_sleep(20); -- -
    
  • 参数为字符串时:

    '||pg_sleep(20); -- -
    

3.2 绕过技术

  1. 引号限制绕过

    • 使用$符号定义标签:
      SELECT $quote$test$quote$;
      
      等价于:
      SELECT 'test';
      
    • 使用CHR()函数拼接字符串
  2. 条件判断
    PostgreSQL使用CASE WHEN语句代替IF

    CASE WHEN condition THEN value1 ELSE value2 END
    

4. PostgreSQL 命令执行漏洞 (CVE-2019-9193)

4.1 漏洞概述

PostgreSQL 9.3-11.2版本中存在"COPY TO/FROM PROGRAM"功能,允许数据库超级用户及pg_read_server_files组中的用户执行操作系统命令。

4.2 漏洞利用步骤

  1. 删除可能存在的表(可选)

    DROP TABLE IF EXISTS cmd_exec;
    
  2. 创建保存命令输出的表

    CREATE TABLE cmd_exec(cmd_output text);
    
  3. 执行系统命令

    COPY cmd_exec FROM PROGRAM 'id';
    
  4. 查看命令输出

    SELECT * FROM cmd_exec;
    

4.3 实际利用技巧

  • 当有SSH密码长度限制时,可分段写入文件再执行
  • 可通过此方法反弹shell获取系统权限

5. 防御措施

  1. 升级PostgreSQL:升级到11.3或更高版本
  2. 权限控制
    • 限制pg_read_server_files组权限
    • 避免使用超级用户账户连接应用
  3. 输入验证:对所有用户输入进行严格过滤
  4. 最小权限原则:应用程序使用最低必要权限的数据库账户
  5. 禁用危险功能:如非必要,禁用COPY PROGRAM功能

6. 参考资源

  • (CVE-2019-9193)PostgreSQL 高权限命令执行漏洞 - FreeBuf网络安全行业门户
  • PostgreSQL官方安全公告

附录:完整SSH交互Python脚本示例

(注:实际脚本应根据目标环境调整,此处略去具体实现细节)

PostgreSQL 堡垒机 SQL 注入与 RCE 漏洞利用指南 1. 堡垒机安全概述 堡垒机(Bastion Host),也称为跳板机或运维安全审计系统,是用于管理和控制内部网络资源访问的安全设备。作为运维人员访问内部服务器和网络设备的唯一入口,它通过集中化的身份认证、权限管理和操作审计来确保运维操作的安全性和可追溯性。 2. 漏洞发现与初步探测 2.1 初始信息收集 目标系统通常通过SSH(22端口)或RDP(3389端口)提供服务 许多厂商自行实现SSH/RDP服务,可能存在漏洞 通过SSH banner信息可判断是否为自定义实现 2.2 数据库类型判断 判断目标数据库是否为PostgreSQL的方法: 端口判断 :PostgreSQL默认使用5432端口 函数差异 : 字符串长度函数: len vs length 版本查询: version vs @@version 子字符串函数: substring vs substr 特殊符号处理 :观察数据库对特定符号的处理方式 系统表判断 : MySQL(version>5.0): information_schema Oracle: all_tables SQL Server: sysobjects 盲注函数 :PostgreSQL特有的函数行为 3. PostgreSQL 盲注技术 3.1 时间盲注检测 如果服务器响应时间随有效负载明显增加(约20秒),则可能存在漏洞。 参数为整数时: 参数为字符串时: 3.2 绕过技术 引号限制绕过 : 使用 $ 符号定义标签: 等价于: 使用 CHR() 函数拼接字符串 条件判断 : PostgreSQL使用 CASE WHEN 语句代替 IF : 4. PostgreSQL 命令执行漏洞 (CVE-2019-9193) 4.1 漏洞概述 PostgreSQL 9.3-11.2版本中存在"COPY TO/FROM PROGRAM"功能,允许数据库超级用户及pg_ read_ server_ files组中的用户执行操作系统命令。 4.2 漏洞利用步骤 删除可能存在的表(可选) : 创建保存命令输出的表 : 执行系统命令 : 查看命令输出 : 4.3 实际利用技巧 当有SSH密码长度限制时,可分段写入文件再执行 可通过此方法反弹shell获取系统权限 5. 防御措施 升级PostgreSQL :升级到11.3或更高版本 权限控制 : 限制pg_ read_ server_ files组权限 避免使用超级用户账户连接应用 输入验证 :对所有用户输入进行严格过滤 最小权限原则 :应用程序使用最低必要权限的数据库账户 禁用危险功能 :如非必要,禁用COPY PROGRAM功能 6. 参考资源 (CVE-2019-9193)PostgreSQL 高权限命令执行漏洞 - FreeBuf网络安全行业门户 PostgreSQL官方安全公告 附录:完整SSH交互Python脚本示例 (注:实际脚本应根据目标环境调整,此处略去具体实现细节)