2010-05-22 13 views
-1

Il semble que cela envoie juste un ping, mais quel est le point de cela quand vous pouvez simplement utiliser ping?que fait ce code de cheval de Troie?

/* WARNING: this is someone's attempt at writing a malware trojan. Do not 
    compile and *definitely* don't install. I added an exit as the 
    first line to avoid mishaps - msw */ 
int main (int argc, char *argv[]) 
{ 
    exit(1); 
    unsigned int pid = 0; 
    char buffer[2]; 
    char *args[] = { 
     "/bin/ping", 
     "-c", 
     "5", 
     NULL, 
     NULL 
    }; 

    if (argc != 2) 
     return 0; 

    args[3] = strdup(argv[1]); 
    for (;;) 
    { 
     gets(buffer); /* FTW */ 

     if (buffer[0] == 0x6e) 
      break; 

     switch (pid = fork()) 
     { 
      case -1: 
       printf("Error Forking\n"); 
       exit(255); 
      case 0: 
       execvp(args[0], args); 
       exit(1); 
      default: 
       break; 
     } 
    } 
    return 255; 
} 
+0

Je ne vois pas comment compiler et exécuter cela pourrait gâcher votre ordinateur, aussi longtemps que vous l'utilisez en toute sécurité. De ce que je rassemble après avoir regardé plus si vous lui passez une adresse IP, il va ping plusieurs fois chaque fois que vous appuyez sur Entrée jusqu'à ce que votre prochaine entrée est 'n' – user318747

+0

La clé est ce qui arrive au stockage utilisé par args quand vous tapez des chaînes de longueur arbitraires dans le tampon. Comme je l'ai écrit, ce n'est pas un bon hack, mais c'est une tentative et cela ne vous mordra probablement pas car la plupart des gens ne tapent pas au ping. Mais il y a peut-être un exploit sur une version particulière de ping say sous cygwin, avoir ce binaire autour du ping nommé pourrait être un vecteur pour une attaque. Peu probable, mais quelqu'un a écrit ce code avec intention, peut-être qu'il connaît un trou que vous n'avez pas. – msw

+0

Oh, et comme ce code n'a aucun mérite inhérent, il y a encore moins de raisons de le construire/exécuter/installer. – msw

Répondre

2

Il veille à ce que ping est appelée avec les arguments -c 5. Ce qui est stupide, car un script shell ou un alias serait plus facile à lire et plus rapide à écrire.

+0

Je pense que vous avez manqué le bit que ping (8) ne lit pas à partir de stdin où ce code le fait à plusieurs reprises jusqu'à ce que quelqu'un tape une ligne commençant par 'n'. Ceci est une tentative d'un cheval de Troie. – msw

0

Ce programme émule fondamentalement un programme shell simple. Un programme shell va prendre les arguments d'un autre programme en entrée et lancer ce programme spécifié dans un nouveau processus. Le programme que vous avez ci-dessus est juste codé en dur pour un programme spécifique (ping dans ce cas) et est très simple.

Un programme shell rend le travail avec le système d'exploitation plus convivial en fournissant une interface pour démarrer les programmes.

+0

Pas même un programme shell. Juste un alias. –

4

C'est un hack - ou une tentative de piratage - pour exécuter du code arbitraire en mode privilégié. Ping doit exécuter la racine SUID pour obtenir un socket brut pour un ICMP_ECHO_REQUEST et le dépassement intentionnel de la mémoire tampon dans gets(buffer) est destiné à transmettre le courrier indésirable au ping.

Je ne vois pas comment cela pourrait fonctionner en pratique, mais vous ne devriez pas le compiler et l'exécuter.