-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;
}
4

3 回答 3

4

让任意代码在特权模式下运行是一种黑客行为——或者是一种黑客行为的尝试。Ping 需要运行 SUID root 以获取 ICMP_ECHO_REQUEST 的原始套接字,并且故意的缓冲区溢出gets(buffer)旨在将垃圾传递给 ping。

我看不出这在实践中是如何工作的,但你不应该编译和运行它。

于 2010-05-22T16:58:44.597 回答
2

它确保ping使用 arguments 调用它-c 5。这是愚蠢的,因为 shell 脚本或别名会更容易阅读和更快地编写。

于 2010-05-22T16:54:32.333 回答
0

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

Shell 程序通过提供启动程序的界面,使操作系统对用户更加友好。

于 2010-05-22T16:56:46.447 回答