目录

  1. 1. 前言
  2. 2. 信息收集
  3. 3. 账户操作
  4. 4. 注入
    1. 4.1. 关于转义
    2. 4.2. 盲注

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

PostgreSQL利用

2026/1/22 Web Postgres
  |     |   总文章阅读量:

前言

参考:

https://tttang.com/archive/1547

https://blog.csdn.net/HatOfDragon/article/details/54601121

https://www.cnblogs.com/yilishazi/p/14710349.html


信息收集

-- 详细信息
select version();

-- 版本信息
show server_version;
select pg_read_file('PG_VERSION', 0, 200);

-- 数字版本信息包括小版号
SHOW server_version_num;
SELECT current_setting('server_version_num');

列目录

-- 注意: 在早期的 PostgreSQL 版本中,pg_ls_dir 不允许使用绝对路径
select pg_ls_dir('/etc');

-- 获取 pgsql 安装目录
select setting from pg_settings where name = 'data_directory';

-- 查找 pgsql 配置文件路径
select setting from pg_settings where name='config_file'

列数据库

SELECT datname FROM pg_database;

查看支持的语言

select * from pg_language;

查看安装的扩展

select * from pg_available_extensions;

查看服务器 ip 地址

select inet_server_addr()

账户操作

查看当前用户是不是管理员权限

SELECT current_setting('is_superuser');
-- on 代表是, off 代表不是

SHOW is_superuser;
SELECT usesuper FROM pg_user WHERE usename = CURRENT_USER;

查询密码

SELECT usename, passwd FROM pg_shadow;
SELECT rolname,rolpassword FROM pg_authid;

-- 当前加密方式,password_encryption参数决定了密码怎么被hash
SELECT name,setting,source,enumvals FROM pg_settings WHERE name = 'password_encryption';

注入

注释符 --/**/(注意 postgres 的这个注释符需要成对)

关于转义

postgresql 9 之前,反斜杠转义

postgresql 9 之后,反斜杠已经变成了普通字符,如果需要使用反斜杠转义可以在需要转义的字符串前面加上E(E就是Escape):

SELECT * FROM user WHERE username LIKE E'%\t%';

postgresql 中字符串需要用单引号包裹,如果使用双引号,系统将认为那是变量

所以最常见的转义就是对单引号的转义,postgresql 对单引号的转义有两种方式:

UPDATE user SET username = 'Peter''s Name' WHERE id = 1;
UPDATE user SET username = E'Peter\s Name' WHERE id = 1;

盲注

延时函数

select pg_sleep(5)

if 判断:

select case when (1>0) then 1 else 0 end