我正在研究我自己用C编写的反向shell,主要用于学习目的。 Here是我的简单反向shell代码,完全正常并且符合预期。现在。为了使它更安全,我想在它上面添加SSL。现在here是我的SSL代码。这一切都有效,并将我的文本打印回我的ncat -lvvp 5000 --ssl
听众。但是,如果我取消注释execl
行并注释ssl_write
行,我会建立SSL套接字连接,但如果我输入任何命令,我将得不到任何回报,然后套接字关闭。
我想知道execl
是否没有通过SSL运行,这是我没有得到任何回报和套接字关闭?
有什么看起来很有意思,我可以在这里解决?谢谢!
答案 0 :(得分:1)
以下代码:
dup2(c->socket, 0);
dup2(c->socket, 1);
dup2(c->socket, 2);
不对。使用OpenSSL通过此套接字启动TLS连接并不会自动将所有后续输出转换为套接字到TLS - 您必须继续使用OpenSSL来执行该转换。在标准输入,输出和错误上复制该套接字会使shell开始尝试将该套接字用于未加密的 I / O;因为它的输出不是有效的TLS数据,这会导致你的ncat混淆并退出。
您需要保持父进程的运行,以便将shell的输入和输出转换为TLS。这可能涉及某种select()
循环到"泵"套接字和shell子进程之间的输入和输出。
答案 1 :(得分:0)
我最终通过不同的方式实现了我想要的东西。我没有运行excel
来打开/bin/sh
并运行命令,而是使用popen()
来运行命令并返回值。像魅力一样工作!