2010-05-22 37 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。

我不明白這是如何在實踐中工作,但你不應該編譯並運行它。