通过SSL套接字反向shell

时间:2015-09-03 00:20:38

标签: c sockets ssl

我正在研究我自己用C编写的反向shell,主要用于学习目的。 Here是我的简单反向shell代码,完全正常并且符合预期。现在。为了使它更安全,我想在它上面添加SSL。现在here是我的SSL代码。这一切都有效,并将我的文本打印回我的ncat -lvvp 5000 --ssl听众。但是,如果我取消注释execl行并注释ssl_write行,我会建立SSL套接字连接,但如果我输入任何命令,我将得不到任何回报,然后套接字关闭。

我想知道execl是否没有通过SSL运行,这是我没有得到任何回报和套接字关闭?

有什么看起来很有意思,我可以在这里解决?谢谢!

2 个答案:

答案 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()来运行命令并返回值。像魅力一样工作!