【发布时间】:2019-01-24 17:44:08
【问题描述】:
我需要一些关于 C 程序的帮助 - 它是一个反向 shell (https://github.com/arturgontijo/remoteShell/blob/master/reverseShell.c) 我做了一些更改,比如将所有内容放在一个循环和一些睡眠模式中 + 放置一些参数以直接传递 IP 和 PORT 现在那个东西效果很好它很稳定(不能用 TAB 自动完成内容的问题我并不关心)但我真正关心的是,如果在目标机器上我按下 CTRL+C 程序,这个东西会中断自行退出。现在我用这个例子来阻止 CTRL+C 调用:
/* Signal Handler for SIGINT */
void sigintHandler(int sig_num)
{
/* Reset handler to catch SIGINT next time.
Refer http://en.cppreference.com/w/c/program/signal */
signal(SIGINT, sigintHandler);
printf("\n Cannot be terminated using Ctrl+C \n");
fflush(stdout);
}
signal(SIGINT, sigintHandler);
我在网上找到了这个例子并将它放在我的循环中,但仍然从客户端按 ctrl+C 中断程序。我想知道 dup2() 是否对此负责,因为在简单的 C 程序上这实际上工作得很好。
【问题讨论】:
-
这部分代码看起来没问题。你能提供一个完整的例子吗?
-
^ 嗨 - 代码如下所示:imgur.com/a/oKf5aP4
-
您不能从信号处理程序中进行任意函数调用。 Footnote 188 of the C Standard 甚至声明“因此,信号处理程序通常不能调用标准库函数。” POSIX allows for the calling of only async-signal-safe functions。请注意,
printf()和fflush()不是异步信号安全的。您获得该代码的在线资源是错误的来源。 -
添加到安德鲁的评论中,
write是异步信号安全的,如果写入的文件描述符是行缓冲或非缓冲的,则不需要刷新:char m[] = "hi\n"; write(stdout, m, sizeof(m));
标签: c ctrl reverse-shell