浅谈Oracle web环境打针技术

12/8/2009来源:Oracle教程人气:3755

1 Oracle 容易引见
  Oracle作为一款比较初期出现的RDBMS数据库,市场占有率比较大,常常用在一些特大型数据库上。它本身去除良好地支持各种SQL话语外,还提供了各种丰富的包,储存进程,甚或支持java和创设library等特点,如斯强大的效能为Hacking提供了良好的方便。

  Oracle本身有很多默许的帐户,并且有很多的储存进程,这些储存历程是由系统建立的,很多默许都是对public开放的,在从前的几年里发布了很多oracle的破绽,包括溢出和SQL打针在内的好多破绽。在这里头,SQL打针破绽显得分外紧急,由于在Oracle里,在不加其余关键字AUTHID CURRENT_USER的情况下,创造的储存进程在运行时是以创建人身份运作的,而public对这些储存进程都有权限调用,之所以万一自带储存历程存在打针的话,很简略让普通用户提升到Oracle系统权限。Oracle自身内置了很多的帐户,此中一些帐户都有默许的密码而且具有CONNECT的权限,这么如若oralce的端口没遭到防火墙的保护又可以被人远路联接的话,就可以被人利用默许帐户远道登陆入系统其后利用系统里的储存进程的SQL打针破绽,系统就会陷落,当然,登陆入oracle还需要sid,不过这也并不艰难,oracle的tnslintener默许没设立密码,完全可以用tnscmd.pl用services下令查出系统的sid(到比较新的版本,这个破绽已经被修理了),这也是是非非常经典的侵入oracle的模式。

  2 Oracle Web Hacking 技术背景

  oracle丰富的系统表。oracle差一点全部的信息都存储系统表里,目前数据库运作的状态,现阶段用户的信息,现阶段数据库的信息,用户所能访问的数据库和表的信息......系统表便是整个数据库的核心一部分,经过恰本土查询亟需的系统表,差一点可以取得全部的信息。如sys.v_$option便包孕了现阶段数据库的一些信息,如是不是支持java等,all_tables里就包孕了全部的表信息,all_tab_colmuns包孕全部的列信息之类,为我们取得信息提供了十分大的方便,后边将相干于何以利用系统表获取敏感信息的描述。

  在oracle的各种破绽里,亟需不一般说下储存进程的打针,实则也并没有什么奥秘,储存历程和函数同样是接享用户的输入其后送来数据库服务器解析施行,如果是采用的组建成SQL字符串的模式实施的话,就很简略将数据和下令搅混,以致SQL打针。但是依据打针发作的点不同,同样地打针破绽的本质也不同。Oracle应用的是PL/SQL,破绽发作在select等DML话语的,由于不支持多话语的施行,之所以如若想运作自各儿的话语如GRANT DBA TO LOVEHSELL这些DDL话语的话,就必须创设自各儿的函数或储存历程,如若没这有关的权限还可以利用cursor打针,用dbms_sql包来饶过限制。绝大多数的打针恰是上边这些有限制的打针,务必倚靠自己创设的一些其余包或许cursor来兑现擢升权限的目的,但是仍是有点十分罕见但是打针环境十分宽松的破绽,便是用户的输入被放在begin和end其间的匿名pl/sql块的打针,这种环境停的打针可以直接打针进多话语,几乎没有任何限制,而可以看到,恰是这种闪光的破绽为我们的web打针技术带回了怎的的灿烂。

  好了,上边提到的都是Oracle的一些进攻技术,但是现时很多的环境是,对外开放web服务,后台老板数据库被防火墙保护着,没法失去数据库的太多详细信息,已经不能直接登陆入数据库开展操作,这个时分即将思忖利用web停的破绽来强攻靠山的数据库了。现下来看下何以进展Oracle web环境下打针吧!oracle可以在各种web环境下很好地工作,各种web环境对我们打针的影响也并不是很大,在asp,.net,jsp中对进来的参数根本没做任何过滤,但是因为.net,jsp语言是强部类语言,在数目字门类的打针上即便sql话语没做过滤但是可能在接受参数的时分就失误了,之所以打针出现在字符串部类的参数上比较多一些。在php环境停,全部的'会被转义为\',在oracle环境里\'并不会变为转义(在oracle环境里的准确转义应当为''),但是在我们自个儿的打针话语里运用'能由于被转成\'而受到毁坏,所以在打针时不能施用'。除外,web环境下就没事儿限制了。在数据库方面,如其话语采用的是参数的模式施行,也不能够被打针,除非施用的是字符串联接的形式(因为字符串联接的形式比较简单,也由于一些历史上的缘故,很多程序员往往会偏向于这种形式,),字符串联接模式的话也会分成两种,参数在select,update,insert这些DML话语其间,与参数在pl/sql匿名块其间,如其web程序没擒获错处,那么我们很简单依据错误判断出目前话语的部类,后头会谈到。在pl/sql匿名块其间的比较罕见,但也不排除,这么的打针根本也是没有什么限制的,可以实施多话语,作任何事,和当地登陆没任何差异。

  3 Oracle Web Hacking 根本思路

  下部说说何以确定目标,打针参数确实定就由大伙儿自各儿来了,重要是何以判断数据库属于oracle,依据数据库的特征很简略判断出来,oracle支持--门类诠释,但是不支持; 分隔实施多话语,oracle有很多系统表,诸如all_tables,透过对这些表的访问也可以判断出是不是属于oracle,除此以外在oracle里的一些函数也可以用于判断,诸如utl_http.request这些,语言上的小细节也可以用以界别系统,诸如在oracle里||是联接符号,但是在其余数据库里就不是了,之所以 and chr(123)||chr(123)=chr(123)||chr(123)这么的,如若可以成功施行,那么就根本应该是oracle了,除此而外,一些脚本在出现数据库查询错处时,对错误信息没处置,也能外泄真实的后盾数据库,这个可以很明显地看出来。

  其后亟需确定的是打针点的部类,通常的情况下,我们进来的参数不是数目字门类就根本是字符门类(其余很多人所说的搜寻型打针实则仍是应当归纳于字符门类的),至于数目字部类的根本不要思忖什么,很简单增添--诠释字符就可以让话语准确闭合了,如果是字符部类的将要思考何以让整个话语准确,通常是增添'以及--这些打针字符来结构自个儿的打针环境。在一些复杂的情况下,有如一个参数在多个sql话语和逻辑里出现,将要自个儿当心结构出切合环境的打针话语了,记住,我们只需要一个能方便安插自各儿sql下令的完好环境:)