天天看点

Oracle注入总结

oracle inject总结获取常见信息语句

获取数据库版本:

获取操作系统版本:

获取当前数据库用户:

获取当前用户权限:

获取所有数据库用户密码:

获取db文件路径:

查看当前用户权限

服务器监听ip

获取当前的操作系统

获取服务器sid

union injection

//基本都是大写哈 判断字段

爆表

爆字段

爆数据

通过字段名查找对应的表:

bool blind injection

decode(条件,值 1,翻译值 1,值 2,翻译值 2,...值 n,翻译值 n,缺省值) 【功能】根据条件返回相应值

测试当前用户

如果是system用户则返回1,不是则返回0.

注入时decode的应用

判断是否是system用户

也可以decode+substr组合

其实和上面的decode差不多

实际应用

instr函数的使用,从一个字符串中查找指定子串的位置

当然也可以配合其他的来使用

time blind injection

oracle的时间盲注通常使用dbms_pipe.receive_message(),而另外一种便是decode()与高耗时sql操作的组合,当然也可以是case,if 等方式与高耗时操作的组合,这里的高耗时操作指的是,例如:(select count(*) from all_objects),对数据库中大量数据进行查询或其他处理的操作,这样的操作会耗费较多的时间,然后通过这个方式来获取数据。这种方式也适用于其他数据库。

dbms_lock.sleep()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制。

首先,不能直接将该函数注入子查询中,因为oracle不支持堆叠查询(stacked query)。其次,只有数据库管理员才能使用dbms_lock包。

这里讲解一下orcle包的概念

oracle包可以分为两部分,一部分是包的规范,相对于java中的接口,另一部分是包体,相当于java里面接口的实现类,实现具体的操作,所以oracle提供了我们雨多的包,为开发者提供了很多便利。

在oracle pl/sql中有一种更好的办法,可以使用下面的指令以内联方式注入延迟:

dbms_pipe.receive_message函数将为从rds管道返回的数据等待10秒。默认情况下,允许以public权限执行该包。dbms_lock.sleep()与之相反,它是一个可以用在sql语句中的函数。

应用:

Oracle注入总结

实际应用[结合sqlmap语句分析]

【dbms_pipe.receive_message的理解】

来自官网的dbms_pipe.receive_message语法: dbms_pipe.receive_message ( pipename in varchar2, timeout in integer default maxwait) return integer; 可以暂时理解成dbms_pipe.receive_message('任意值',延迟时间)

(select count(*) from all_objects) 会花费更多是时间去查询所有数据库的条目,所以以这种方式进行时间判断依据,这是一个骚气的方式。(类比owasp测试指南中老hu机的案例)

error injection

使用报错注入需要使用类似 1=[报错语句],1>[报错语句],使用比较运算符,这样的方式进行报错注入

ctxsys.drithsx.sn()函数:

Oracle注入总结

ctxsys.ctx_report.token_type()函数:

xmltype()函数:

dbms_xdb_version.checkin()函数:

dbms_xdb_version.makeversioned()函数:

dbms_xdb_version.uncheckout()函数:

dbms_utility.sqlid_to_sqlhash()函数:

ordsys.ord_dicom.getmappingxpath()函数:

utl_inaddr.get_host_name()函数:

utl_inaddr.get_host_address()函数:

带外通道(oob:out of band channels)

使用一些除常规通道以外的替代的信道来请求服务器资源,一般使用 oracle 发送http或者dns请求,将查询结果带到请求中,然后监测外网服务器的http和dns日志,从日志中获取 sql 语句查询的结果,通过这种方式将繁琐的盲注转换成可以直接简便的获取查询结果的方式,尤其是基于时间的盲注,能极大地加快速度

utl_http.request()函数

检测是否支持utl_http.request

反弹注入信息

Oracle注入总结

utl_inaddr.get_host_address()函数

sys.dbms_ldap.init()函数

httpuritype()函数

执行系统命令

自己注意观察回显点就行 以及执行的命令 需要稍微改一下 比如第一个union及其字段。还有必须要有权限一般是dba才可以。

Oracle注入总结