0x0 介绍
在Linux系统做未授权测试,我们须准备一个安全的渗透环境,通常第一件事就是安装虚拟机。且在攻击阶段中还需要对受害系统进行控制。常见的后门大多数是利用Metasploit生成,而目前反病毒产品遇到Metasploit文件签名的程序就会添加特征库作为查杀对象,所以开发出自己的后门程序非常必要。
这篇文章将介绍如何写一个具有反向连接功能的后门。
反向连接:通常的 络连接程序是由客户端通过服务器开放的端口连接到服务器,反向连接是客户端打开服务器端口,由服务器主动连接客户端。反向连接这种方式常用于绕过防火墙和路由器安全限制。
举个例子,防火墙隔离的计算机会阻止传入的连接,但对于连接Internet服务器的出站连接则不做严格限制。一旦连接建立 络通讯,远程主机就可以向后门发送命令。这种通讯方法更有助于控制受控机器,也更不容易检测。
在本系列教程文章中,将分成3部分撰写,一步步介绍如何用Python语言开发一个反向TCP连接程序。每一个部分都会介绍一个新函数、命令或代码,使其更加灵活。
0x1 第一部分:创建反向连接基础
这一部分将介绍创建 络连接,发送和接受输出。
1.1 服务器端编写(控制端)
前面介绍过,攻击者并不会主动连接受控服务器,因为会被受控制服务器的防火墙拦截。
但是我们可以把自身当成服务器,让受控服务器作为客户端反向连接我们,然后向客户端发送命令。客户端与服务端安装套接字实现反向连接的代码如下:
让我们分解以上代码,逐行解释每段代码的作用:
- 整体思路:声明subprocess模块中的sp函数执行命令
- 1)监听信息:通过获取命令行参数得到套接字监听的主机IP、端口
- 2)套接字部分:安装套接字,绑定套接字,监听连接、接收客户端的连接
- 3)输出连接信息:如果有 络连接信息,就打印出来
- 4)循环部分:将脚本运行到一个while循环中,以便发送命令并接收输出5)if判断-1: 如果输入的命令不是”exit()”程序继续运行,否则发送给客户端”exit()”,让客户端关闭套接字连接
- 6)if判断-2:如果输入的命令是空的,我们再次跳过while循环。不执行后面的命令
- 7)发送、接收命令:如果if判断没有执行退出或者跳过,则负责发送和接收命令
- 8)处理接收结果:将接收的数据和数据实际大小切割开来存放
- 9)处理数据:如果接收的数据实际大小跟接收数据的大小不匹配,那就运行一个while循环把剩余的数据拼接起来,直到数据实际大小跟接收数据结果相等
- 10)打印结果过滤换行符
- 11)出现异常则关闭套接字
以上代码理解起来并不困难,但是随着代码的复杂度不会再逐行解释,只解释重要的部分。接下来让我们编写客户端的Socket部分。
1.2 客户端代码编写(受控制端)
受害者连接我们的代码不应该太多。
让我们分解以上代码,逐行解释每段代码的作用:
- 1)通过sys.argv模块的命令行接受Socket套接字信息
- 2)设置Socket套接字并连接到指定的主机IP、端口。
- 3)接收服务器发送的命令的部分放在一个循环语句内。
- 4)如果接收的命令不是exit(),就通过管道执行接收的命令。执行命令后的输出分配给变量sh。
- 5)(out,err)是标准的stdout和stderr流。
- 6)将流的输出分配给result变量。
- 7)将文件大小设置为16字节的long型,用于助服务器端(攻击者)识别文件大小。
- 8)计算长度并将其附加到输出里。
if-else后的部分:如果收到的命令是exit(),跳出循环和关闭连接。
执行我们的攻击者(服务器)脚本,看看结果如下:
客户端连接命令行的主机信息。
服务器脚本运行的截图:
正如预期,客户机控制台是空的,因为我们没有打印任何东西。预期编写完成后的截图如下:
到此我们已经将基础的反向TCP连接代码编写完成了,现在将继续编写些基础函数来帮助我们把程序界面改善,例如给Shell界面添加颜色。
这份代码在Windows上也可以运行,但Windows平台不是本系列教程的首选平台。
1.3 实践部分
reverseTcp.py
connect.py
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!