打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【干货分享】利用 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变得异彩纷呈。

图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和port2.如果没有出错的话,我们将通过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/env python

import socket, subprocess as sp, sys, os

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

connect函数

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

图8

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

交互式会话函数

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

图9

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

数据发送函数

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

图10

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

调用各个函数

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

图11

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

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

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

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

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

图12

我们来浏览一下帮助选项

图13

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

小结

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

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

转自安全客

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

炼石信息安全培训班


专注信息安全人才培养

搭建企业人才供需桥梁

咨询QQ群:495066536

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python脚本中执行shell命令和shell脚本
如何在Windows、Linux中安装后门?
pdb工具来调试python脚本小技巧
DataNitro:调用Python的方法【2】
程序员:利用Python实现可控制肉鸡的反向Shell
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服