显错注入
Oracle需要严谨的查询语法,所以引入了一个叫dual虚表的东西。
例如:select 1,2,3 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条数据
这里我没搭建Oracle数据库,就不做显错的演示了
报错注入
and字段名<>字段值(一个条件,查询时排除符合条件的数据当字段名中字段值符合数据就排除符合这个条件的数据)
例: and TABLE_NAME<>‘DUAL’
查询时符合table_name字段中值为DUAL的整条数据都会被排除
CTXSYS.DRITHSX.SN(user,(select banner from v¥version where rownum=1)) -->这里注意一下语句里面应该是dollar符,但是跟下面语句的dollar符不能同时在文章中出现,同时出现会被转义成其它东西,所以这里用中文字符代替了一下
去查询关于主题的对应关键词,然后因为查询失败(应该是这个用户没有创建和查询的权限,默认情况没有创建,爆出未查询到的错误从而爆出查询的内容)
and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1) -->查询数据库版本
这里<>与!= 的效果是一样的都是不等于
进靶场看看
查它的表看看
在进去admin表里面查字段
接着查除了UNAME以外的其它字段
根据靶场的提示,flag就在UPASS字段里,那我们直接进去看数据吧!
它好像有那个大病,老说我右边少了个括号,但我没发现它少哇,于是乎,不查了…
未完待续…