无名草
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

Oracle数据库简介
什么是Oracle数据库
Oracle 数据库系统,是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品。Oracle数据库也是一种关系数据库,此数据库体量较大,一般与jsp网站联合。
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数据库中大小写是敏感的,而此三表中数据默认都是大写的,所以在进行查询的时候注意小写的数据可能会造成数据无法查到。
注入函数解析
什么是报错注入
报错注入是是一种可以忽略数据类型的注入方法,它使数据库出错,然后强行丢出一个致命性错误,这个错误信息里面的内容我们可以控制。
Dual表
Dual是一个实表(也有人说它是虚表),如果你直接查询它,它只显示一个X,列名为DUMMY
Oracle 使用查询语句获取数据时需要跟上表名,没有表的情况下可以使用Dual,Dual是Oracle的虚拟表,只是用来构成select的语法规则。
那么要它有什么用妮?
它实际上是为了满足查询语句的结构而产生
比如你想查询你的用户名 select user from Dual
调用系统函数:(获得随机值:select dbms_random.random from dual)
还能做加减法:select 9+1 from dual
………………
还有各种功能自己去挖掘吧
Oracle的基本查询语句
select * from all_tables 查询出所有的表
select * from user_tables 查询出当前用户的表
select*from all_tab_columns 查询出所有的字段
select*from user_tab_columns 查询出当前用户的字段
select*from v$version 查版本
Oracle 中rownum的用法
rownum=1 (限制查询返回的总行数为一条)
oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的。对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
我们可以用rownum<3来要求他输出2条数据
查询时排除符合条件的数据
and 字段名<>字段值 (一个条件,查询时排除符合条件的数据 当字段名中字段值符合数据就排除符合这个条件的数据)
eg: and TABLE_NAME<>'DUAL'
查询时符合table_name字段中值为DUAL的整条数据都会被排除
报错注入函数解析
CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1))
去查询关于主题的对应关键词,然后因为查询失败(应该是这个用户没有创建和查询的权限,默认情况没有创建,爆出未查询到的错误从而爆出查询的内容)
and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1))-- 查询数据库版本
为什么需要1=?
因为Oracle的语言严谨,where后面跟的都是条件,单独的字符串不能作为条件,比较才能作为条件,存在的字段名等于这个字符串也可以作为条件。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)