PHP开发教程

PostgreSQL语法

1.注释、结束标记、连接符

a.PostgreSQL既然遵循SQL语言,当然支持–注释;

b.PostgreSQL支持/*和/**/注释,这点类似于Mysql;

c.PostgreSQL数据库使用psql的时候,需要在命令后加上;(分号)或者是\g来表示语句已经结束以执行查询.

d.PostgreSQL是采用||符号来连接字符串的,注意使用^,小心|被转义。

2.自动匹配

PostgreSQL不像Mysql能够自动匹配字段,这点类似于oracle,所以在注入的时候要注意下,而且默认情况下是支持union查询的;

3.连接PostgreSQL

默认情况下是不给外连的,如果想远程管理PostgreSQL数据库的话,需要修改../PostgreSQL/data/pg_bha.conf文件, 请参考 PostgreSQL学习手册.PostgreSQL默认用户是postgres(类似于mysql的root),默认端口是5432,默认系统库是 postgres。

使用psql -h ip -d dataname -p port -U username,这里注意-U参数是大写,如果是本机采用默认安装的话,直接使用psql -U postgres后会提示输入密码,正确输入密码后会出现postgres=#的字符(类似于mysql中的mysql>),就可以正常使用 psql了。

\? 显示pgsql命令的说明

\h 显示sql命令的说明

\q 是退出

\l 是现实系统中所有的数据库

4.pgAdmin III

a.pgAdmin III是PostgreSQL中自带的界面化数据库管理程序,可以查询PostgreSQL数据库中所有域、函数、序列、数据表结构及相关属性、触发器函数、视图等。

注入PostgreSQL

既然PostgreSQL是RDBMS,所以系统中所有数据库的结构会保存系统库中,所以注入的时候就相对比较方便。由于注释方式和mysql是一样,如何判断是什么数据库?关于这点我也没有一个标准的答案,我想可以扫描5432端口(如何web和库没有分离的情况下),使用version()函数的返回结果来判断,直接使用查询语句如select * from pg_class/select * from pg_group的返回结果来判断数据库类型.由于PostgreSQL的目录页存在information_schema,我手上也没有 PostgreSQL数据库的注射点,所以我也不知道能不能使用select schema_name from information_schema_schemata来判断,不好意思,关于使用information_schema只是我的想法,有条件的朋友验证下。

介绍下PostgreSQL中内置函数、表和视图在入侵的应用。

current_database() 当前数据库名字

session_user 会话用户 |

current_user 目前执行环境中的用户名 |这三个函数调用时候不需要加()

user 和session_user一样 |

inet_client_port() 远程端口

cast(sourcetype AS targettype) 定义类型转换

current_setting() 以查询形式获取setting_name 设置的当前值

convert() 编码转换

pg_stat_user_tables 存放系统所有表名的视图,关键字段是relname,使用select relname from pg_stat_user_tables limit offset,1 来达到逐个读取表名的目的

pg_stat_all_tables 和pg_stat_all_tables视图功能一样

pg_shadow 看到shadow大家是否想到/etc/shadow,此表包含数据库用户的信息,关键字段username、passwd和usesuper(超级用户的意思),不过此表被做了权限设置

pg_user 这个表结构和pg_shadow一样,不过此表的全局可读,passwd字段可能被清空或者加密

pg_group 定义组以及哪些用户属于哪个组的信息,关键字段groname

information_schema.columns 这个目录对象中保存了所有的字段,关键字段是column_name,使用select column_name from information_columns where table_name=tablename limit offset,1这样就可以达到读取每个表名的字段

遍历PG当前数据库中的全部表

SELECT tablename FROM pg_tables
WHERE tablename NOT LIKE ‘pg%’
AND tablename NOT LIKE ‘sql_%’
ORDER BY tablename;

查询PG数据库中的所有表包括系统表

select relname as table_name from pg_class where relkind=’r';

这个类似mssql里的master
然后你用SELECT datname FROM pg_database 这个就可以看到所有的数据库了
然后你写入数据库 库名 用SELECT table_schema,table_name FROM information_schema.tables
这个查询表

读文件

首先需要建立一个表,然后copy文件内容到表中,在读取表内容,思路是这样的
create table read (line text);
copy read from ‘/etc/passwd’;alter table read add id serial–
select * from read;
drop table read;

Powered by PHP二次开发 ©2008-2018