Oracle是一个流行的商业数据库系统,它可以在Windows和很多Unix系统下运行。 由于Oracle数据库缺乏完整的身份验证,允许攻击者远程调用任意系统库函数,从而以数据库运行权限执行任意命令。 Oracle数据库的大部分功能是由PL/SQL包提供的。PL/SQL允许创建一些包含导出的过程和函数的可执行package。PL/SQL package可以调用那些由操作系统库或动态链接库导出的函数。攻击者可以调用system()函数并向其传递所要执行的程序名,显然用户如果能够执行上述操作,应该能以那些有\"CREATE LIBRARY\"权限的用户身份登陆进入数据库。然而攻击者可以欺骗Oracle服务器,无需通过身份认证就可加载任意系统库并执行任意函数。 当一个PL/SQL package要求运行一个外部过程时,oracle进程连接到Listener并请求它加载相关的库。Listener会启动另外一个进程(在Unix系统下是extproc,在Windows系统下是extproc.exe),将oracle转向该进程。oracle进程通过命名管道连接extproc进程,并将发给Listener的请求转发给它。Extproc进程加载相应的库并调用该函数。然而,在上述过程中没有执行任何认证。攻击者可以伪装成oracle进程,并强迫使用套接字而不是命名管道进行远程操作。攻击者可以通过TCP连接listener/extproc端口,无需认证就可以使oracle执行任意的库函数,例如system()调用。在Windows系统下,Oracle数据库缺省是以Local SYSTEM身份运行,在Unix系统下,缺省是以\"oracle\"用户身份运行。攻击者可以远程以上述用户身份执行任意命令。
Oracle是一个流行的商业数据库系统,它可以在Windows和很多Unix系统下运行。 由于Oracle数据库缺乏完整的身份验证,允许攻击者远程调用任意系统库函数,从而以数据库运行权限执行任意命令。 Oracle数据库的大部分功能是由PL/SQL包提供的。PL/SQL允许创建一些包含导出的过程和函数的可执行package。PL/SQL package可以调用那些由操作系统库或动态链接库导出的函数。攻击者可以调用system()函数并向其传递所要执行的程序名,显然用户如果能够执行上述操作,应该能以那些有\"CREATE LIBRARY\"权限的用户身份登陆进入数据库。然而攻击者可以欺骗Oracle服务器,无需通过身份认证就可加载任意系统库并执行任意函数。 当一个PL/SQL package要求运行一个外部过程时,oracle进程连接到Listener并请求它加载相关的库。Listener会启动另外一个进程(在Unix系统下是extproc,在Windows系统下是extproc.exe),将oracle转向该进程。oracle进程通过命名管道连接extproc进程,并将发给Listener的请求转发给它。Extproc进程加载相应的库并调用该函数。然而,在上述过程中没有执行任何认证。攻击者可以伪装成oracle进程,并强迫使用套接字而不是命名管道进行远程操作。攻击者可以通过TCP连接listener/extproc端口,无需认证就可以使oracle执行任意的库函数,例如system()调用。在Windows系统下,Oracle数据库缺省是以Local SYSTEM身份运行,在Unix系统下,缺省是以\"oracle\"用户身份运行。攻击者可以远程以上述用户身份执行任意命令。