安全路透社
当前位置:安全路透社 > 安全客 > 正文

【技术分享】利用 Python 打造反向 TCP 后门

t01d8f6beb895ef2fbc.jpg

Python的反向TCP后门


在Linux中,我们需要在一个安全的环境中进行黑客攻击(渗透测试)。通常情况下,我们做的第一件事就是安装虚拟化软件,同时安装能找到的所有操作系统发行版。在黑客攻击的阶段,为了拿下目标机器,我们需要借助某种程序来感染系统。这种做法的缺点是:防病毒产品对于那些广为人知的Metasploit文件都了如指掌,因此,为了攻陷受害者机器,我们需要禁用这些产品——但这种做法不太现实。因此,这就迫使我们开发自己的攻击程序。当然,这方面的程序(即Payload)有很多种类型,而今天要讲的,则是反向TCP程序。

反向TCP:在正常转发连接中,客户端是通过服务器的开放端口连接到服务器的,但在反向连接的情况下,客户端会主动打开服务器上将要连接的端口。反向连接最常见的用途就是绕过防火墙和路由器的安全限制。

例如,在阻止入站连接的防火墙后面的电脑上运行的后门,可以轻松建立出站连接,通过Internet与远程主机进行通信。一旦建立了连接,远程主机就可以向后门发送命令。这种通信方式对攻击者来说很有帮助,因为在受害者机器上启动本地Shell是非常容易的。

在这个文章系列中,我们将利用Python开发一个反向TCP程序。那么,我们为什么要分成多个部分呢?这是因为,在每个部分中,我们都会为Shell引入一个新的函数、命令或代码,这样能够使其更加灵活。我们要从头开始,打造一款真正属于自己的、令人敬畏的、奇幻无比的、难以置信的……(我觉得这些形容词已经差不多够了)Shell。

在这篇文章中,我们会把Shell锻造得稍微漂亮一些。下面,让我们先从服务器(攻击方)脚本开始。


脚本编写:IMPORT语句


下面是我们新写的import语句

#!/usr/bin/env python
import socket, sys, os

不错! !


脚本编写:脚本的彩色显示函数


这个函数能够让我们的Shell变得异彩纷呈。

http://p3.qhimg.com/t017a1371224e1638a6.png

图1

这个函数能够将传递给它的文本赋予指定的颜色。它可以接受的参数:

1."r" 或 "red" ——红色

2."g" 或 "green"——绿色

3."b" 或 "blue"——蓝色

4."y" 或 "yellow" ——黄色

5."lgray" ——浅灰

6."underline" —— 带下划线的文本

7."strike" —— 带删除线的文本


脚本编写:banner函数


虽然这几个函数都不是必需的,但是可以改善用户体验。 我们可以根据自己的喜好进行相应的定制。

http://p8.qhimg.com/t0165cf396d38aa4131.png

图2

注意:这里,我把“lgray”改成了“gray”。 正如我刚才所说,只要我们喜欢,可以随意修改。

很明显,这个函数的作用是将文本返回给调用者。


脚本编写:主控函数


该函数将会接管服务器套接字。在上一篇文章中,我们没有使用任何函数,而是直接使用原始代码。现在,我们要把这些原始代码写成函数,并进行了一些必要的修改。

http://p3.qhimg.com/t01463c243db30f1cb7.png

图3

不要慌,仔细阅读代码,你总会弄懂的。让我们化整为零,分别解释一下好吗?

1.我们接收套接字信息并将其传递给相应的变量host和port

2.如果没有出错的话,我们将通过script_color函数输出“Framework Started Success”。

3.接下来是向屏幕输出标语的banner()函数。

4.然后,设置套接字,绑定并开始监听。

5.通常情况下,我们将 host 作为空字符串进行传递。如果是这样的话,我们在设置套接字后将主机字符串改为“localhost”

6.我们接着打印“Listening on host address:port number …”

7.我们开始接收连接。

8.如果一切顺利,并且客户端发起连接的话,我们将进入console函数,并将连接流和主机地址作为参数传递给该函数。

9.如果函数退出,我们将关闭套接字

这实际上并不是很难!所以,让我们继续。


脚本编写:控制台函数


这是最难的一部分,但如果我们能够搞定这一个函数的话,后面的内容将不在话下。控制台函数的代码如下所示。

http://p0.qhimg.com/t0193ccd6680d669742.png

图4

代码有点长。首先,我们打印了一个字符串,指出已经从远程主机建立了连接。然后,我们开始接收来自该连接的数据,这个数据是与远程系统相关的信息(我们将在客户端进行处理)。然后,我们对数据进行整理,下面给出相应的数据布局:

系统类型

计算机名称(节点名称)

发行版本

系统版本

机器体系结构

用户名

所有这些信息都来自(我们在客户端使用的)os模块中的uname()和getlogin()函数。

之后,我们使用收到的信息为shell创建一个自定义提示符,例如,root@127.0.0.1。

然后,我们进入命令循环。该循环提供了用于连接的各种命令。这里将定义我们的自定义命令,因此诸如“ls -l”和其他linux命令将不起作用。

下面是我们的前5条内置命令。

1.exec——接收一个命令作为参数,并在远程主机上执行该命令。这是我们日常的linux命令可以发挥作用的地方,例如exec ls -l

2.cls——清除终端屏幕。使用默认的linux clear命令

3.help——调用help函数,并打印帮助文本(我们将很快实现该函数)

4.sysinfo——打印收到的远程系统的信息

5.exit()——向远程shell发送暂停命令,同时从本地退出

6.任何非指定的命令都不被接受,并且在else语句中打印一条错误消息

对于内置的exec命令,不应该向其传递任何参数,否则会打印一个错误消息。在exec命令中有一个新的函数send_data,它可以接收连接流以及要执行的命令。同时,它还会自动处理数据的发送和接收。

就像您所看到的那样,我倒真希望让您来写代码。您可以在代码可以正常运行后对其进行修改。如果在写作过程中进行修改的话,可能会导致很多问题(相信我)。


脚本编写:帮助函数


所有内置在这个框架(脚本)中的命令的说明都囊括在这个函数中。

http://p1.qhimg.com/t01b50a4f4fedb0cf41.png

图5

这个函数会按照顺序打印help_list,并对其进行格式化。


脚本编写:数据发送函数


该函数如前所述将会自动发送和接收数据。

http://p6.qhimg.com/t01349c22c15ef36bbf.png

图6

现在,让我们把这一切都整合起来。


调用各个函数


我们知道,函数是不会自行执行的,除非它被调用。

http://p4.qhimg.com/t0141fef4c1c00a446d.png

图7

上面这些代码,只是我们所有工作的一部分而已。下面,让我们开始看看客户端脚本需要进行哪些修改。


客户端代码


为了与服务器配合好,客户端也需要遵守一些规则和命令,例如服务器脚本中的exec命令。所以,我们将import语句改为:

#!/usr/bin/env python
import socket, subprocess as sp, sys, os

我们的第一函数将是connect函数。


connect函数


顾名思义,这个函数的作用是连接到指定的地址。建立连接后,它也会发送系统信息。

http://p6.qhimg.com/t01296f7248c2d4c909.png

图8

然后,它会以连接流作为参数调用interactive_session函数。


交互式会话函数


这个函数会运行一个循环语句,然后根据“if”指令来接收和执行命令。

http://p4.qhimg.com/t0105c7a87db16ec81b.png

图9

该函数使用另一个函数send_data来发送数据。


数据发送函数


该函数计算数据的长度,并将这个长度与数据一起发送。

http://p6.qhimg.com/t010bdc887b81c85e71.png

图10

这个函数将有助于未来的修改。


调用各个函数


我们必须调用函数,否则它自己是不会执行的。

http://p0.qhimg.com/t0187c233d536aa4fd2.png

图11

下面,让我们执行攻击方(服务器)脚本,看看能得到什么结果

root@Sploit:~/Desktop# python reverseTcp.py '' 8000

客户端应建立连接,并在命令行上传递主机信息。

root@Sploit:~/Desktop# python connect.py 127.0.0.1 8000

以下是攻击方的服务器脚本的屏幕截图:

http://p5.qhimg.com/t0193b4485a6e567ff9.png

图12

我们来浏览一下帮助选项

http://p9.qhimg.com/t01529fb0e0482456ea.png

图13 

从远程系统的nmap结果来看,我认为已经在注册的服务上打开了一个端口。不出所料,客户端控制台果然没有显示任何内容,因为我们没有打印任何东西。


小结


在本文中,我们向读者介绍了如何利用Python建立一个反向后门。

不要忘了,更正、修改、更新总是受欢迎的。


原文链接:https://0x00sec.org/t/how-to-make-a-reverse-tcp-backdoor-in-python-part-2/1040

未经允许不得转载:安全路透社 » 【技术分享】利用 Python 打造反向 TCP 后门

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册