oracle injection





文章提交:pt007.at.vip.sina.
信息起源:邪恶八进制信息安全团队(www.eviloctal.)

前言

自己不是一个专业的数据库治理员,也不是一个专门研讨oracle保险的研究员,文中的语句很多都写得十分不专业,对数据库懂得也不够,甚至很多语句可能在不同版本上并不合适,一些技术也是牛人们很早提到过的,本文只是从一个web平安的角度来看如何入侵一台被防火墙防护的Oracle数据库,对一些入侵技术做了web入侵上的总结跟延长,尽量将原理讲得清楚。本文也并没有对sql注射中存在的一些共性进行探讨 ,如利用substr函数和经典注射这些,而是站在oracle数据库的角度,尽量展示一些Sql注射入侵的思路以及如何利用数据库的一些特征,在web上做最大的入侵。一些牛人的工具也行将宣布出来,盼望还有人爱好手工精美的注射。

一 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的方式。

二 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的一些攻打泛亚娱乐技术:yuan01.bc88.info/fei,但是当初许多的环境是,对外开放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匿名块之间的比拟少见,但也不消除,这样的注射基础也是没有什么制约的,可以履行多语句,做任何事,跟本地登陆不任何差别。

三 oracle Web Hacking 基本思路

下面说说如何断定目的,注射参数确实定就由大家自己来了,重要是如何判定数据库属于oracle,根据数据库的特性很容易判断出来,oracle支持类型解释,但是不支持;分隔执行多语句,oracle有很多系统表,譬如all_tables,通过对这些表的拜访也可以判断出是否属于oracle,另外在oracle里的一些函数也可以用来判断,譬如utl_.request这些,语言上的小细节也可以用来辨别体系,譬如在oracle里''是连接符,,但是在其余数据库里就不是了,所以 and chr(123)''chr(123)chr(123)''chr(123)这样的,如果可以顺利执行,那么就基本应该是oracle了,另外,一些脚本在出现数据库查问错误时,对错误信息没有处置,也会泄漏实在的后台数据库,这个可以很显明地看出来。

09-02 05:33