postgresql基本語法

2021-08-26 12:55:27 字數 2845 閱讀 1321

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;

思路就是這樣的,具體怎麼使用就看大家自己發揮了(encode,^_^)

Postgresql注入語法指南

copy from 在注入中常用的幾個注入語法通常有這麼幾個 顯示版本 從已知表段字段爆資料 列庫 列資料庫中的表段 列表段中的字段 讀取配置資訊,例如資料庫登陸賬戶和密碼 讀寫檔案 那我就乙個乙個來講這些postgresql的語法是怎樣的 顯示版本 default select version u...

PostgreSQL基本用法

sudo apt get install postgresql client sudo apt get install postgresql sudo service postgresql start sudo u postgres psqlpostgres postgres password po...

Postgresql基本操作

一 建立使用者 切換到postgres使用者 sudo su postgres 建立使用者 create user dbuser with password 123456 二 建立資料庫create database testdb owner dbuser 三 將testdb資料庫的所有許可權都賦予...