freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

99+

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注入 — 报错注入
无名草 2021-10-10 20:22:32 227293

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

# 渗透测试 # web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 无名草 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
无名草 LV.6
这家伙太懒了,还未填写个人描述!
  • 50 文章数
  • 86 关注者
文件上传解析漏洞(三)
2022-03-27
服务器端请求伪造--SSRF
2022-03-24
逻辑漏洞之支付漏洞
2022-03-19
文章目录