2010-05-22 30 views
-1

看起来这只是发送一个ping,但是什么时候你可以使用ping?这是什么尝试了特洛伊木马代码呢?

/* 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

我没有看到如何编译和运行,这可能弄乱你的电脑,只要你使用它安全。从如果你通过一个IP地址,这就是我看它更多的后聚集,它会反复平是5次,每次按下Enter键,直到你的下一个输入“N” – user318747 2010-05-22 17:33:42

+0

的关键是会发生什么由ARGS时所使用的存储你输入任意长度的字符串到缓冲区就像我写的那样,这不是一个好的黑客,但它是一个尝试,它可能不会咬你,因为大多数人不打字。但是也许在cygwin下有一个针对特定版本的ping的漏洞利用,这个命名为ping的二进制文件可能成为攻击的载体。不太可能,但是有人用意图编写了这段代码,也许他知道一些你不知道的漏洞。 – msw 2010-05-22 18:02:50

+0

呵呵,既然这段代码没有固有的优点,那么构建/运行/安装它的原因就更少了。 – msw 2010-05-22 18:05:21

回答

2

它确保ping被调用的参数-c 5。这很愚蠢,因为shell脚本或别名会更容易阅读,写得更快。

+0

我想你错过了ping(8)没有从stdin中读取代码的位,直到有人输入以'n'开始的行。这是一个木马的尝试。 – msw 2010-05-22 17:07:27

0

这个程序基本上模拟了一个简单的shell程序。 shell程序将把另一个程序的参数作为输入,并在新进程中启动该指定的程序。你上面的程序只是一个特定程序的硬编码(在这种情况下是ping),并且非常简单。

一个shell程序,使与操作系统的多个用户通过提供启动程序的界面友好合作。

+0

甚至没有一个shell程序。只是一个别名。 – 2010-05-22 16:57:55

4

这是一个黑客 - 或企图在一个黑客 - 获得任意代码运行在特权模式。 Ping需要运行SUID root才能获得ICMP_ECHO_REQUEST的原始套接字,gets(buffer)中的故意缓冲区溢出旨在将垃圾传递给ping。

我不明白这是如何在实践中工作,但你不应该编译并运行它。