看起来这只是发送一个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 :(得分:4)
在特权模式下运行任意代码是一种黑客攻击 - 或者是一次黑客攻击。 Ping需要运行SUID root来获取ICMP_ECHO_REQUEST的原始套接字,并且gets(buffer)
中的故意缓冲区溢出旨在将垃圾传递给ping。
我不知道这在实践中如何起作用,但你不应该编译并运行它。
答案 1 :(得分:2)
确保使用参数ping
调用-c 5
。这是愚蠢的,因为shell脚本或别名会更容易阅读和写入更快。
答案 2 :(得分:0)
该程序基本上模拟了一个简单的shell程序。 shell程序将把另一个程序的参数作为输入,并在新进程中启动指定的程序。您上面的程序只是针对一个特定程序(在本例中为ping)进行了硬编码,非常简单。
shell程序通过提供启动程序的界面,使操作系统的使用更加友好。