零基础学黑客,搜索公众号:白帽子左一
先了解Oracle一些内容
Oracle做联合注入的注意事项(附带示例)
联合查询的字段数必须和前面的查询语句字段数一致
select id,username,password from admin union select 1,'admin' from dual (X)
联合查询的字段类型也必须和前面的查询语句字段类型一致
select id,username,password from admin union select 1,2,3 from dual (X)
联合查询的语句中必须要有表名
select id,username,password from admin union select 1,'admin','admin' (X)
正确的联合查询方法
select id,username,password from admin union select 1,'admin','admin' from dual (√)
注意:oracle中包裹字符串用’'不要用""
Oracle自带的表
select * from all_tables 查询出所有的表
关键字段:
OWNER,用户(表的拥有者),不同的用户下会有不同的表
TABLE_NAME,表名
select * from all_tab_columns 查询出所有的字段
关键字段:
OWNER,用户(表的拥有者),不同的用户下会有不同的表
TABLE_NAME,表名
COLUMN_NAME,字段名
下面两个都是查询当前用户的表和字段的,所以没有OWNER字段,另外两个字段是有的
select * from user_tables 查询出当前用户的表
select * from user_tab_columns 查询出当前用户的字段
其实用的话都用查字段的表就好了,因为查字段的表里面存储了表名和字段
Oracle怎么实现mysql中Limit的功能
在Oracle中有一个比较特殊的存在,它就是rownum,它是一个伪列,它并不存储在任何表中,而是在当我们执行了查询语句之后,它就会出现,对查出来的数据进行编号,将它做为一个判断规则时,它是不支持用>号的,只能是=1或者<n
示例如下
SELECT * FROM user WHERE rownum = 1; -- 没问题
SELECT * FROM user WHERE rownum = 2; -- 有问题
SELECT * FROM user WHERE rownum < 2; -- 没问题
SELECT * FROM user WHERE rownum > 2; -- 有问题
那如果我们就是想对他用>呢,那么也有办法,用子查询给rownum取个别名,然后外面的查询语句,再使用别名调用rownum的值就好了
例如这里有5条数据我要取后三条数据
SELECT * FROM (SELECT rownum rn,DEPT.* FROM DEPT WHERE rownum < 6)r WHERE rn > 2;
如何判断是否是oracle数据库
通过版本号判断,and (select count(*) from v$version) > 0