Big Binary Files Upload (PostgreSQL)
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
PostgreSQL 提供了一种称为 大对象 的结构,通过 pg_largeobject
表访问,旨在存储大数据类型,如图像或 PDF 文档。这种方法相较于 COPY TO
函数具有优势,因为它能够 将数据导出回文件系统,确保原始文件的精确副本得以保留。
要在此表中 存储完整文件,必须在 pg_largeobject
表中创建一个对象(通过 LOID 识别),然后将每个 2KB 大小的数据块插入到该对象中。确保这些块的大小恰好为 2KB(最后一个块可能例外)是至关重要的,以确保导出功能正常运行。
要 将二进制数据 分割为 2KB 块,可以执行以下命令:
对于将每个文件编码为 Base64 或 Hex,可以使用以下命令:
重要:在自动化此过程时,请确保发送2KB的明文字节块。由于大小翻倍,十六进制编码的文件每个块将需要4KB的数据,而Base64编码的文件遵循公式ceil(n / 3) * 4
。
可以使用以下命令查看大对象的内容以进行调试:
使用 lo_creat
和 Base64
要存储二进制数据,首先创建一个 LOID:
在需要精确控制的情况下,例如利用盲SQL注入,lo_create
更适合用于指定固定的LOID。
数据块可以如下插入:
要导出并在使用后可能删除大对象:
使用 lo_import
和十六进制
lo_import
函数可以用于创建和指定大型对象的 LOID:
在对象创建后,数据按页面插入,确保每个块不超过2KB:
为了完成这个过程,数据被导出并且大对象被删除:
需要注意的是,大对象可能具有 ACLs(访问控制列表),这可能会限制对即使是由您的用户创建的对象的访问。然而,具有宽松 ACLs 的旧对象可能仍然可以访问以进行内容外泄。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)