导语:针对linux系统进行渗透时,我们会在相对安全的环境下进行攻击。一般我们会在目标机器上安装一些虚拟化的软件,并且针对系统安装相应的环境。
针对linux系统进行渗透时,我们会在相对安全的环境下进行攻击。一般我们会在目标机器上安装一些虚拟化的软件,并且针对系统安装相应的环境。为了渗透成功,我们需要在靶机上种植后门,但是现在大部分杀毒软件都会对MSF产生的后门进行查杀,所以在实战中我们需要避免使用msf这种工具产生后门。这就需要我们自己编写后门程序了,这篇文章就是讲如何编写msf中的其中一个payload:reverse_tcp模块。
下面简单的反向tcp连接做一个解释:
Reverse_tcp:在正向连接中,客户端通过访问服务端上开放的端口进行通信;而反向链接则是客户端开放端口,然后等待服务端进行连接。这一方法常用于绕过服务端的防火墙。
举个例子,处于防火墙防护下的计算机是禁止外来链接访问的,但是后门可以很容易使这台计算机访问互联网上的远程主机。一旦连接建立,远程主机就可以在受害计算机中执行命令。这种攻击方式是非常有效的,如果在受害机器本地起一个shell,即使在没有用户控制的情况下都容易被发现。
今天的文章中,我们会通过python开发反向tcp后门。接下来几篇文章中我还会继续介绍如何使用python编写其他模块的后门。
现在我们将要编写三个程序块:连接,发送指令,接收输出.让我们开始吧~
攻击者的服务端代码
之前已经叙述过,作为攻击者,我们不能直接连接受害服务器,这样可能会触发杀毒软件,或者我们会被禁止连接。但是受害机器连接到服务端,然后再发送指令,这样就可以很大几率绕过防火墙。我们第一步先初始化sockets模块,以及处理反向连接。
这么多代码看着烦?那我们分解一下吧?
1. 导入相关数据包 2. 通过sys.argv模块接收套接字端口信息 3. 设置套接字,绑定套接字,侦听套接字端口,等待连接 4. 如果有人访问,脚本会输出一串消息。 5. 脚本一直处于无限循环当中,等待发送命令,以及接收命令回显。 6. 如果输入的命令为空,那么继续下一个循环 7. 如果命令是exit(),发送给客户端,就会同时关闭本地和远程的连接。 8. 如果上述两种情况都没有的话,脚本就会将输入当成要在受害机器上执行的命令,并且接收返回的结果。 9. 我们将消息大小和内容分离出来。大小命名为total_size,内容命名为:result。 10. 如果发现输出的大小和total_size不匹配,那么我们继续运行一个while循环,知道全部接收完为止。 11. 输出结果,并且去掉最后的换行符 12. 如果有一个步骤存在错误,那么socket通信就会关闭
这并不难吧,所以我不会一行一行的解释我写的代码,只需要了解下重要的模块就好了,现在我们编写客户端的代码吧~
被攻击端代码
客户端连接到我们的机器并不需要太多代码~
我还是将它分解一下讲解吧~
1. 通过sys.argv模块在命令行接收要连接的对象:ip和端口 2. 建立套接字对象,连接到指定地址和端口 3. 如果连接成功,我们就会收到来自服务端的信息 4. 如果命令不是exit(),则就会通过sp模块执行命令。命令执行的结果会通过sh进行传递。 5. (out,err)是标准化输出以及标准错误流 6. 将输出流写入result变量 7. 将长度设置为16字节是为了服务端更好的识别。 8. 然后计算长度,将长度写入到输出当中。(和服务端的提取长度相结合) 9. 如果收到exit()命令,就会跳出循环,关闭连接。
在服务端执行脚本:
[email protected]:~/Desktop# python reverseTcp.py '' 8000
客户端在运行过程中填写相关信息:
[email protected]:~/Desktop# python connect.py 127.0.0.1 8000
下图是执行的命令截图:
并且,在受害机器上没有任何输出,因为我们没有在代码中采用任何输出代码