Oracle注入—报错注入

Oracle注入—报错注入

1、Oracle报错注入知识扫盲

 


一、Oracle报错注入知识扫盲

  报错注入

  报错注入就是,输入的一些能让数据库出错的语句,数据库会把这个错误回显给我们

  OK,,什么语句能让数据库出错???

  先来个知识扫盲吧

  Oracle数据库

  Dual表,是Oracle数据库里的一个表,Dual是一个实表,也有人说是虚表,如果直接查询这个表格,它只显示一个X,列名DUMMY,那么要他有什么用呢?

  它实际上是为了满足查询语句的结构而产生

  比如 select 1,2,3,4   >>>>     数据库报错

  Why   数据库有很多种,虽然很多种,但是在语法结构上是大同小异的,可以说大致相似,但又用区别,不完全相同

  像,select 1,2,3,4  在MySQL数据库就是可以执行的   但是在Oracle数据库就不行,因为规定后面要 from 表名

  没有 from 表名  当然会出错了

  但是在注入的时候又不知道表名,不会又像Access数据库那样一个一个去猜吧,,

  这个Oracle数据库相对来说比较友好,,在每个Oracle数据库里都有一个Dual表,那是不是就不用猜了

  所以Dual表存在的意义就是满足sql语句的

  Oracle数据库弱化了库的概念,强化了用户的概念

  在Oracle里把用户来当做库的区分,简单理解,一个用户就是一个库

  Oracle数据库的比较常用语法

  查询用户名:select user from Dual

  做加减法:select 9+1 FROM Dual   >>>   10

  select * from all_tables 查询出所有的表

  select * from user_tables 查询当前用户的表

  select * from  all_tab_columns 查询出所有字段

  select * from user_tab_columns 查询当前用户的字段

  select * from v$version 查版本

  rownum=1 限制查询返回的总行数为一条

  对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,以此类推,这个伪字段可以用于限制查询返回的总行数

  可以用rownum<3来要求它输出2条数据

  只有1可以写=  rownum=1

  其他的只能写<  rownum<2

  rownum<3

  rownum<4

  ......

  <>  不等于符号

  很多时候网站只允许输出一条数据,即使你遍历整个表,但是只能输出第一条数据,怎么办呢,,如何做到像,,MySQL数据库里的limit那样灵活呢

  先看一个语句

  select ronum r ,username form admin

  思考一下输出的是不是一张表的呢,网站只是输出表里的数据,并不会把表给我们看,网站是查询表里的内容,但是在后台,它确实是一张表

  ok,,那么我们可不可以form它呢   ,,of course

  select username form (select rownum r ,username form admin) where rownum=1

  再来看一个函数

  CTXSYS.DRITHSX.SN(用户(查询内容))

  这个函数就是报错注入使用的函数

  在括号里面输入注入语句

  返回报错信息,很简单,怎么讲呢,,你就想像这个是一个搜索框,搜索什么东西都搜不到,并告诉你没搜到括号里的值,并且会把括号里的值会返回给我们,

  上面是帮助我们理解的 ,,其实是这样的‘查询对应的关键词,因为查询失败,爆出未查询到错误从而爆出查询内容,为什么会查询失败呢?,这个用户没用创建和修改的权限,我们随便输入一个用户名,在系统里大概率不会存在的用户,当然没有权限了,你想想,连这个用户都没有哪里来的权限呢’

  举个例子

  CTXSYS.DRITHSX.SN(1(select 1,2 form dual))

  >>>  '1,2'查找不到

  大概就是这个意思

  

  

 

posted @ 2021-12-21 23:05  彧先生  阅读(717)  评论(0编辑  收藏  举报