2017-11-09 10:44:21
阅读:1721次
点赞(0)
收藏
来源: 0x00sec.rog

作者:shan66

译者:shan66
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
Python的反向TCP后门
在linux中,我们需要在一个安全的环境中进行黑客攻击(渗透测试)。通常情况下,我们做的第一件事就是安装虚拟化软件,同时安装能找到的所有操作系统发行版。在黑客攻击的阶段,为了拿下目标机器,我们需要借助某种程序来感染系统。这种做法的缺点是:防病毒产品对于那些广为人知的Metasploit文件都了如指掌,因此,为了攻陷受害者机器,我们需要禁用这些产品——但这种做法不太现实。因此,这就迫使我们开发自己的攻击程序。当然,这方面的程序(即Payload)有很多种类型,而今天要讲的,则是反向TCP程序。
反向TCP:在正常转发连接中,客户端是通过服务器的开放端口连接到服务器的,但在反向连接的情况下,客户端会主动打开服务器上将要连接的端口。反向连接最常见的用途就是绕过防火墙和路由器的安全限制。
例如,在阻止入站连接的防火墙后面的电脑上运行的后门,可以轻松建立出站连接,通过Internet与远程主机进行通信。一旦建立了连接,远程主机就可以向后门发送命令。这种通信方式对攻击者来说很有帮助,因为在受害者机器上启动本地Shell是非常容易的。
在这个文章系列中,我们将利用Python开发一个反向TCP程序。那么,我们为什么要分成多个部分呢?这是因为,在每个部分中,我们都会为Shell引入一个新的函数、命令或代码,这样能够使其更加灵活。我们要从头开始,打造一款真正属于自己的、令人敬畏的、奇幻无比的、难以置信的……(我觉得这些形容词已经差不多够了)Shell。
在这篇文章中,我们会把Shell锻造得稍微漂亮一些。下面,让我们先从服务器(攻击方)脚本开始。
脚本编写:IMPORT语句
下面是我们新写的import语句
#!/usr/bin/envpython importsocket,sys,os不错! !
脚本编写:脚本的彩色显示函数
这个函数能够让我们的Shell变得异彩纷呈。

图1
这个函数能够将传递给它的文本赋予指定的颜色。它可以接受的参数:
1."r" 或 "red" ——红色
2."g" 或 "green"——绿色
3."b" 或 "blue"——蓝色
4."y" 或 "yellow" ——黄色
5."lgray" ——浅灰
6."underline" —— 带下划线的文本
7."strike" —— 带删除线的文本
脚本编写:banner函数
虽然这几个函数都不是必需的,但是可以改善用户体验。 我们可以根据自己的喜好进行相应的定制。

图2
注意:这里,我把“lgray”改成了“gray”。 正如我刚才所说,只要我们喜欢,可以随意修改。
很明显,这个函数的作用是将文本返回给调用者。
脚本编写:主控函数
该函数将会接管服务器套接字。在上一篇文章中,我们没有使用任何函数,而是直接使用原始代码。现在,我们要把这些原始代码写成函数,并进行了一些必要的修改。

图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.如果函数退出,我们将关闭套接字
这实际上并不是很难!所以,让我们继续。
脚本编写:控制台函数
这是最难的一部分,但如果我们能够搞定这一个函数的话,后面的内容将不在话下。控制台函数的代码如下所示。

图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,它可以接收连接流以及要执行的命令。同时,它还会自动处理数据的发送和接收。
就像您所看到的那样,我倒真希望让您来写代码。您可以在代码可以正常运行后对其进行修改。如果在写作过程中进行修改的话,可能会导致很多问题(相信我)。
脚本编写:帮助函数
所有内置在这个框架(脚本)中的命令的说明都囊括在这个函数中。

图5
这个函数会按照顺序打印help_list,并对其进行格式化。
脚本编写:数据发送函数
该函数如前所述将会自动发送和接收数据。

图6
现在,让我们把这一切都整合起来。
调用各个函数
我们知道,函数是不会自行执行的,除非它被调用。

图7
上面这些代码,只是我们所有工作的一部分而已。下面,让我们开始看看客户端脚本需要进行哪些修改。
客户端代码
为了与服务器配合好,客户端也需要遵守一些规则和命令,例如服务器脚本中的exec命令。所以,我们将import语句改为:
#!/usr/bin/envpython importsocket,subprocessassp,sys,os我们的第一函数将是connect函数。
connect函数
顾名思义,这个函数的作用是连接到指定的地址。建立连接后,它也会发送系统信息。

图8
然后,它会以连接流作为参数调用interactive_session函数。
交互式会话函数
这个函数会运行一个循环语句,然后根据“if”指令来接收和执行命令。

图9
该函数使用另一个函数send_data来发送数据。
数据发送函数
该函数计算数据的长度,并将这个长度与数据一起发送。

图10
这个函数将有助于未来的修改。
调用各个函数
我们必须调用函数,否则它自己是不会执行的。

图11
下面,让我们执行攻击方(服务器)脚本,看看能得到什么结果
root@Sploit:~/Desktop#pythonreverseTcp.py''8000客户端应建立连接,并在命令行上传递主机信息。
root@Sploit:~/Desktop#pythonconnect.py127.0.0.18000以下是攻击方的服务器脚本的屏幕截图:

图12
我们来浏览一下帮助选项

图13
从远程系统的nmap结果来看,我认为已经在注册的服务上打开了一个端口。不出所料,客户端控制台果然没有显示任何内容,因为我们没有打印任何东西。
小结
在本文中,我们向读者介绍了如何利用Python建立一个反向后门。
不要忘了,更正、修改、更新总是受欢迎的。


本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://0x00sec.org/t/how-to-make-a-reverse-tcp-backdoor-in-python-part-2/1040